thinkphp redis队列处理_教你用ThinkPHP中thinkphpqueue

53c8461e07d64b16dfe2b2fb20dd79eb.png

php中文网最新课程

每日17点准时技术干货分享

c2e3a1e5e24099fc9edd06b71e152754.png

957157d27a72b37ddcc94713fd84e068.png

最近小编收到群里面的小伙伴在使用ThinkPHP5.0的框架时,不知道如何使用php-queue(实在尴尬,网上很多这方面的教程)。哈哈,不想参考也没关系,小编就具体地走一遍吧~~关于什么是队列?队列的解决什么?队列有哪些场景?... 等等这些问题,开发者请自行先去了解,还有本案例只针对Thi nkPHP框架进行具体操作哦。 1、安装 thinkphp-queue      推荐使用Composer进行安装,切换到项目的根目录,执行: composer require topthink/think-queue 2、配置消息队列的存储环境     配置文件位于 application\extra\queue.php,如图: 5b65abbbdede600979352887cb419c88.png 使用Redis驱动,如果Redis环境还没有安装,请自行安装哦,很简单的,或者也可以使用其他类型驱动,如图: 80ea2ae6aca3b841620d028c4eab4813.png 3、任务的创建 我们在index模块下,Index.php文件,建立一个名为 queue 的方法(一定要这样么?当然不是,本教程,只是例子,你可以新建模块,方法名也可以是其他),如图: d52ac06ee4717bbae858a971a116a43d.png 3a7c582aa57eb75a0c346a58ae199586.png  4、任务消息的消费以及删除处理 我们在 index模块下创建一个 job 文件,该文件用来处理消费模式,如图: 646304f7350c48ac9e3a23c60c07c7c3.png 在 Demo 这个类下,创建一个 fire 方法,该方法是消息队列默认调用的方法。如图: a1196369a008c8d045a6f37e9e342457.png 以上就是完成任务的创建--》推送--》消费了。
在浏览器或者终端,执行一下我们 index/queue.html 方法,就完成创建以及推送了,关于任务消费,可以参考一下命令,在终端切换到项目的根目录: 5、监听任务并执行
php think queue:listenphp think queue:work –daemon(不加–daemon为执行单个任务)

两种,具体的可选参数可以输入命令加 –help 查看

可配合supervisor使用,保证进程常驻

1.1 命令模式
  • queue:subscribe 命令 [截至2017-02-15,作者暂未实现该模式,略过]

  • queue:work 命令

  • work 命令:该命令将启动一个 work 进程来处理消息队列。

php think queue:work --queue helloJobQueue
  • queue:listen 命令

listen 命令:该命令将会创建一个 listen 父进程 ,然后由父进程通过 proc_open(‘php think queue:work’) 的方式来创建一个work 子 进程来处理消息队列,且限制该work进程的执行时间。

php think queue:listen --queue helloJobQueue
2.2 命令行参数
  • Work 模式

php think queue:work \--daemon            //是否循环执行,如果不加该参数,则该命令处理完下一个消息就退出--queue  helloJobQueue  //要处理的队列的名称--delay  0 \        //如果本次任务执行抛出异常且任务未被删除时,设置其下次执行前延迟多少秒,默认为0--force  \          //系统处于维护状态时是否仍然处理任务,并未找到相关说明--memory 128 \      //该进程允许使用的内存上限,以 M 为单位--sleep  3 \        //如果队列中无任务,则sleep多少秒后重新检查(work+daemon模式)或者退出(listen或非daemon模式)--tries  2          //如果任务已经超过尝试次数上限,则触发‘任务尝试次数超限’事件,默认为0
  • Listen 模式

php think queue:listen \--queue  helloJobQueue \   //监听的队列的名称--delay  0 \         //如果本次任务执行抛出异常且任务未被删除时,设置其下次执行前延迟多少秒,默认为0--memory 128 \       //该进程允许使用的内存上限,以 M 为单位--sleep  3 \         //如果队列中无任务,则多长时间后重新检查,daemon模式下有效--tries  0 \         //如果任务已经超过重发次数上限,则进入失败处理逻辑,默认为0--timeout 60         //创建的work子进程的允许执行的最长时间,以秒为单位
  • 可以看到 listen 模式下,不包含 --deamon 参数,原因下面会说明

Linux启动守护进程,以tp5为例子

nohup php think queue:work --daemon --queue 任务名称 &nohup php think queue:work --daemon --queue 任务名称 &

在Linux查看任务数量,可以在终端输入:jobs -l

0c1e17e91534ebd4d1c9144271552af1.png

0599aaf811e9b06a09cd2da42365b5ef.png

9a9eeeca753d74270dd2a3029723ec7f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值