如何实现tp5.1的消息队列常驻进程,消息队列采用的tp5.1自带的think-queue消息队列,结合 supervisor 进程管理使队列进程常驻。在这里记录一下顺便分享给大家,下面逻辑是加入队列、消费队列和写入数据库。
一、tp5.1的安装方法
用 composer 安装最新稳定版本
2、配置
3、配置文件位于项目根目录下的 config/queue.php,添加如下内容:
我配置了redis驱动,大家可以根据自己的情况配置参数。
创建数据库表
创建一张表,用于展示消费队列写入数据库的操作。
4、创建消息队列任务
以index模块为例,创建一个 /app/index/job/Task.php 文件(job目录也是手动创建),代码如下:
5、入队列(生产任务)
1). 有push()和later()两种方法,前者是立即执行,后者是延迟$delay秒后执行。
2). 调用later()方法,将该任务分配到group1队列里,延迟10秒执行
3). 调用之后,我们通过redis的远程管理工具会发现指定db库的队列里有对应的数据,说明完成了入队列
6、出队列(消费任务)
在项目根目录执行命令
之后(其中group1为队列名),数据库成功写入一条数据。接下来开始安装和配置supervisor来守护该进程不断的执行任务。
二、supervisor的安装和配置
supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
yum安装supervisor:
配置:
1、在这里我创建了一个命名为supervisor的目录用于存放supervisor和队列的日志文件以及include的配置文件,其目录结构为:
2、然后找到/etc/supervisord.conf配置文件,编辑如下信息:
3、在/var/supervisor/conf目录里创建一个.conf文件,这里命名为queue_work.conf,内容如下:
对于index这个单模块而言,不同的业务逻辑为了区分可能会存在多个队列名,这种情况将多个队列名用逗号拼接起来:
4、重启
或
调用方法,成功写入数据库。