Laravel框架的消息队列
介绍
框架版本:7.0
这里以日常生活的排队取餐简单的理解一下
连接队列队列任务的区别
连接
简单理解: 有固定的几家店(如
Amazon SQS、Beanstalk或Redis等…)队列
简单理解:在店里可以有很多排队取餐的队伍,默认有一条排队的队伍
队列任务
简单理解:每个排队取餐的队伍,都有很多人,上一个人取餐完毕才能轮到下一个人,不能插队
ps:这里需要注意的是,队列是可以设置优先级的,即多条排队取餐的队伍,其中的队伍就是设置优先取餐的
ps:我们一般都是配置和使用
Redis队列
配置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管理器,可参考博主的另外两篇博文《宝塔面板配置Supervisor进程管理器》和《Linux - supervisor安装及配置》
特别感谢
参考博客:
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: