laravel框架的消息队列 | laravel china 社区-江南app体育官方入口

框架版本:7.0

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

  • 连接

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

  • 队列

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

  • 队列任务

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

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

ps:我们一般都是配置和使用 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管理器,可参考博主的另外两篇博文《》和《》

参考博客:

本作品采用《cc 协议》,转载必须注明作者和本文链接
emin
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
以构建论坛项目 larabbs 为线索,展开对 laravel 框架的全面学习。应用程序架构思路贴近 laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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