laravel框架的消息队列 | laravel china 社区-凯发备用官网
框架版本: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,highps:如果推送到指定队列,队列命令一定要记得加该队列的名称,否则不会执行!!!
最大尝试次数
php artisan queue:work --tries=3如果在任务类上指定了最大尝试次数,它将优先于命令行上提供的值:
ps:一旦
queue:work命令已经启动,它将一直运行,直到它被手动停止或你关闭你的终端。为了让queue:work进程永久地在后台运行,您应该使用一个进程监视器,如supervisor,以确保队列worker不会停止运行;如需安装supervisor管理器,可参考博主的另外两篇博文《》和《》
参考博客:
本作品采用《cc 协议》,转载必须注明作者和本文链接
推荐文章: