如何实现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、重启

  或

  调用方法,成功写入数据库。