Laravel框架的消息队列

介绍

框架版本:7.0

这里以日常生活的排队取餐简单的理解一下 连接 队列 队列任务 的区别

  • 连接

    简单理解: 有固定的几家店(如 Amazon SQSBeanstalkRedis 等…)

  • 队列

    简单理解:在店里可以有很多排队取餐的队伍,默认有一条排队的队伍

  • 队列任务

    简单理解:每个排队取餐的队伍,都有很多人,上一个人取餐完毕才能轮到下一个人,不能插队

    ps:这里需要注意的是,队列是可以设置优先级的,即多条排队取餐的队伍,其中的队伍就是设置优先取餐的

ps:我们一般都是配置和使用 Redis队列

配置Redis队列连接

  • config目录下的database.php文件里修改redis的相关配置,建立一个redis连接,也可以去.env文件里直接修改redis的相关配置,如下图:

Database

Database

  • 在去config目录下的queue.php文件里把default这个参数的值改成redis,或者去.env文件里把QUEUE_CONNECTION这个参数的值改成redis,如下图

Database

Database

  • ps : 改完配置后,需要在终端输入指令:php artisan config:clear,保证配置能重新加载生效

生成队列文件

进入框架的根目录在终端上输入指令php artisan make:job 后面跟上队列名

比如:php artisan make:job TestJobs 这里的TestJobs就是队列名,系统会自动在app目录下自动生成Jobs目录,且会在Jobs目录下自动生成TestJobs这个文件,其中的handle方法是在队列处理任务时调用,如下图:

Database

调用队列

  • 同步调用

    TestJobs::dispatchNow()
    ps : 同步调用不会排队,会立即运行,且不会触发任务事件

  • 异步调用

    TestJobs::dispatch()

  • 延时异步调用

    TestJobs::dispatch()->delay(10)

  • 调度到特定的连接

    TestJobs::dispatch()->onConnection('sqs')
    ps : 连接一共有:syncdatabasebeanstalkdsqsredis五种,与 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

    连接一共有:syncdatabasebeanstalkdsqsredis五种,与 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管理器,可参考博主的另外两篇博文《宝塔面板配置Supervisor进程管理器》和《Linux - supervisor安装及配置

特别感谢

参考博客:

本作品采用《CC 协议》,转载必须注明作者和本文链接
EMin
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!