laravel框架的消息队列 | laravel china 社区-金年会app官方网
框架版本:7.0
这里以日常生活的排队取餐简单的理解一下
连接
队列
队列任务
的区别
连接
简单理解: 有固定的几家店(如
amazon sqs
、beanstalk
或redis
等…)队列
简单理解:在店里可以有很多排队取餐的队伍,默认有一条排队的队伍
队列任务
简单理解:每个排队取餐的队伍,都有很多人,上一个人取餐完毕才能轮到下一个人,不能插队
ps:这里需要注意的是,队列是可以设置优先级的,即多条排队取餐的队伍,其中的队伍就是设置优先取餐的
ps:我们一般都是配置和使用
redis队列
- 在
config
目录下的database.php
文件里修改redis
的相关配置,建立一个redis
连接,也可以去.env
文件里直接修改redis
的相关配置,如下图:
- 在去
config
目录下的queue.php
文件里把default
这个参数的值改成redis
,或者去.env
文件里把queue_connection
这个参数的值改成redis
,如下图
ps : 改完配置后,需要在终端输入指令:
php artisan config:clear
,保证配置能重新加载生效
进入框架的根目录在终端上输入指令php artisan make:job
后面跟上队列名
比如:
php artisan make:job testjobs
这里的testjobs
就是队列名,系统会自动在app
目录下自动生成jobs
目录,且会在jobs
目录下自动生成testjobs
这个文件,其中的handle
方法是在队列处理任务时调用,如下图:
同步调用
testjobs::dispatchnow()
ps : 同步调用不会排队,会立即运行,且不会触发任务事件
异步调用
testjobs::dispatch()
延时异步调用
testjobs::dispatch()->delay(10)
调度到特定的连接
testjobs::dispatch()->onconnection('sqs')
ps : 连接一共有:sync
、database
、beanstalkd
、sqs
、redis
五种,与config/queue.php
配置文件中定义的一个连接相对应调度到特定的队列
testjobs::dispatch()->onqueue('processing')
ps : 默认队列名在config
目录下的queue.php
文件里的对应连接的queue
这个参数的值
使用queue:work 命令
php artisan queue:work
队列 worker 是长生命周期的进程,并将启动的应用程序状态存储在内存中。因此,在启动它们之后,,代码库中的更改对其不起作用,因此,在部署过程中,一定要重新启动你的队列
php artisan queue:restart
##使用
queue:listen
命令php artisan queue:listen
当使用
queue:listen
命令时,当你想要重新加载更新的代码或重置应用程序状态时,你不必手动重新启动 worker;但是,这个命令的效率不如queue:work
指定连接
php artisan queue:work redis
连接一共有:
sync
、database
、beanstalkd
、sqs
、redis
五种,与config/queue.php
配置文件中定义的一个连接相对应指定队列
php artisan queue:work redis --queue=emails
指定多个队列:
php artisan queue:work redis --queue=emails,high
ps:如果推送到指定队列,队列命令一定要记得加该队列的名称,否则不会执行!!!
最大尝试次数
php artisan queue:work --tries=3
如果在任务类上指定了最大尝试次数,它将优先于命令行上提供的值:
ps:一旦
queue:work
命令已经启动,它将一直运行,直到它被手动停止或你关闭你的终端。为了让queue:work
进程永久地在后台运行,您应该使用一个进程监视器,如supervisor
,以确保队列worker
不会停止运行;如需安装supervisor
管理器,可参考博主的另外两篇博文《》和《》
参考博客:
本作品采用《cc 协议》,转载必须注明作者和本文链接
推荐文章: