当前位置: 首页 > 后端技术 > PHP

Laravel5.4队列简单配置与使用

时间:2023-03-29 23:33:29 PHP

概述什么是队列?百度百科说“队列”是传输过程中存储数据的容器。举几个生活中的例子:iphone新品发布,三里屯iphone新到货。每个人都必须排队购买。不能说大量的人一起冲进去,那这家店就完蛋了。你有一群女朋友。非要一个个来,一起受不了?C语言中堆的概念也是一样,先进先出,不能早起赶晚。回到正题:消息队列是为海量数据处理而准备的概念。它有很多实现方法,而不是单一的代码结构。这里有一篇比较专业的文章:http://www.cnblogs.com/xuyata...还有适合新手的教程:http://www.imooc.com/learn/852废话说完,下面进入彻底题目:Laravel为我们提供了一个简单易配置的队列类。引用一点官方的翻译:Laravel队列为不同的后台队列服务提供了统一的API,比如Beanstalk、AmazonSQS、Redis,甚至其他基于关系数据库的队列。队列的目的是延迟处理耗时的任务,例如发送电子邮件,从而大大减少网络请求和相应的时间。队列配置文件存储在config/queue.php中。可以在此文件中找到每个队列驱动程序的配置,包括数据库、Beanstalkd、AmazonSQS、Redis和同步(本机使用)驱动程序。它还包括一个用于放弃队列的任务的空队列驱动程序。Laravel在5.4版本直接提供了全局函数dispatch(),你可以在任何地方调用它。并且无需加载任何对象或实例化类。这个函数的主要作用是将你的排队需求添加到指定的容器中(专业的叫生产者,其实你可以理解为你在商场购物后排队结账的时候)。太多了。我相信你知道。phpartisanqueue:tablephpartisanmigrate执行以上两条命令后,大力打开configqueue.php,在key=default的数组中使用env配置文件加载方式。laravel安装好后,默认是sync(同步的),我们需要改成异步的(你现在可以暂时认为是synchronous!=queue),这里我们选择使用关系型数据库来实现queueQUEUE_DRIVER=databasecreatetaskcreatetask=makeaproducer=(其实就是在队列中写一个你要执行的业务逻辑),name随便取,不过最好遵循命名约定phpartisanmake:jobSendReminderEmail的生成的文件大致分为2部分:__construct()构造方法,句柄队列执行方法(意思是队列执行的时候,使用你这里写的代码)classSendReminderEmailimplementsShouldQueue{//你不用去处理它使用Dispatchable、InteractsWithQueue、Queueable、SerializesModels;受保护的$名称;/***创建一个新的作业实例。**@returnvoid*/publicfunction__construct($name){$this->name=$name;}/***执行作业。**@returnvoid*/publicfunctionhandle(){DB::table('email')->insert(['name'=>$this->name,'img'=>1,'sort'=>1]);}}然后producer就可以使用controller中的dispatch方法来调用了,我在Businesspublicf下面创建了100个for循环unctionindex(Request$request){for($i=0;$i<=100;$i++){dispatch(newSendReminderEmail("email".$i));}}在你通过数据迁移的数据表中基本上是这样的consumer消费者=队列处理=(你已经开始在商城购物支付了),使用如下命令开始消费,队列会根据上面的业务逻辑。处理完成后,当前任务会自动删除。phpartisanqueue:work基本上如下。Laravel5.4队列的简单配置和使用到此结束。更专业的挂炸天教程请参考中国Laravelhttp://d.laravel-china.org/do...