Laravel5中队列配置和使用分析
序
队列常用于两种场景,一种是高并发的情况,另一种是耗时的操作,其中任务可以放入队列,消费者可以从队列中取出任务执行。当然,也有如何处理失败、延迟和重试,以及在更复杂的情况下实现优先级。
在Laravel 5中使用队列非常简单,已经实现了故障处理、延迟和重试的方法。让我们简单尝试一下Laravel的队列服务。
默认情况下,Laravel支持以下队列服务:sync、database、beanstalk d、SQS和Redis。在这个例子中,redis被用作队列服务,应该首先配置redis服务。
1.队列服务配置
默认情况下,redis的连接是在配置文件队列的连接中定义的。
Redis'=['driver'=' Redis ',' connection'=' default ',' queue'=' default ',' expire'=60,],将默认队列驱动程序更改为中的redis。环境环境配置文件:
QUEUE_DRIVER=redis为了避免配置缓存的影响,请执行以下命令来清除和重建配置缓存:
Php artisan config:cache2。创建新的可排队作业
使用命令:
Php artisan make:job MyJob创建了一个名为MyJob的新队列处理类,并在App/Jobs目录下自动生成一个MyJob.php文件。
MyJob.php需要实现handle方法,具体用于执行队列任务。构造函数可用于传递所需的参数。handle方法支持依赖注入。
这里,handle方法是随机编写的,即以列表类型的数据结构存储键值数据,并测试消费队列是否工作。构造函数传递两个参数,即键和值。
?phpnamespace App \ Jobs使用应用程序\作业\作业;使用照明\队列\序列化模型;使用照明\队列\交互开关队列;使用照明\合同\队列\应该队列;使用照明\支持\立面\ Redis类MyJob扩展了Job实现ShouldQueue{使用InteractsWithQueue,SerializesModelsprivate $密钥;private $值;/** *创建新的作业实例。* * @ return void */public function _ _ construct($ key,$ value){ $ this-key=$ key;$ this-value=$ value;} /** *执行作业。* * @ return void */public function handle(){ redis :3360 hset(' queue . test ',$this-key,$ this-value);} public function failed(){ dump(' failed ');}}使用控制器中的dispatch方法调用队列,将任务放入队列,在控制器中编写一个public function test()等方法,new MyJob的构造函数传递两个随机生成的字符串参数:
$ queueId=$ this-dispatch(new MyJob(' key _ ')。str_random(4),str _ random(10)));DD($ queueId);配置并访问路由,可以多访问几次,然后在Redis中查看,会发现队列存储在一个Queue :3360 Queue : Default List结构中:
其中,值内容如下,转换为json格式,但实际上是带序列号的字符串:
{“作业”:“照亮\\队列\\[emailprotected]”,“数据”: {“命令”:“O:14:”App \ \ Jobs \ \ my job“:63: { s :19: \ ' \ u 0000 App \ \ Jobs \ \ my job \ u 0000 key \ ';i:1s 336021: \ ' \ u 0000 app \ \ Jobs \ \ my job \ u 0000 value \ ';i:2s:10: '连接\ ';n;s:5: '队列\ ';n;s:5: '延迟\ ';n;s 33606: \ ' \ u 0000 * \ u 0000 job \ ';n;}'},' id ' : ' ev2 bhqulx 0 t8 prcvhw 1qt 0 fkp 8 acqcyi 8 ','尝试' : 1}在这里,数据参数包含队列服务Job的名称、构造函数的参数等信息,也是消费者执行任务的依据。尝试次数表示重试的次数,如果队列任务无法执行,通常会重试一次。您可以设置最大重试次数。
3.消费队列
此时,任务只在队列中,但不被消耗。执行:
使用php artisan queue:listen命令,Laravel开始消耗队列。
可以看到这些任务都被消耗掉了,然后去Redis看看是否达到了预期的效果。每个任务都将数据写入列表类型结构。
这证明队列任务消耗是成功的。
摘要
本文到此结束。当然,Laravel队列还有更多的用法。请继续参考官方手册。希望本文的内容对大家学习Laravel有所帮助。
版权声明:Laravel5中队列配置和使用分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。