php代码实现tp5监听队列,采用thinkphp(think-queue)消息队列+supervisor实现进程常驻...

如何实现tp5.1的消息队列常驻进程,消息队列采用的tp5.1自带的think-queue消息队列,结合 supervisor 进程管理使队列进程常驻。在这里记录一下顺便分享给大家,下面逻辑是加入队列、消费队列和写入数据库。

一、tp5.1的安装方法

用 composer 安装最新稳定版本

1e926e5ff37a3f3576d6bcf31ec2d765.png

2、配置

55b7cd86928786694b525ae069e6d249.png

3、配置文件位于项目根目录下的 config/queue.php,添加如下内容:

29d131e0f11c14cdd0ae51543a48f06b.png

我配置了redis驱动,大家可以根据自己的情况配置参数。

创建数据库表

创建一张表,用于展示消费队列写入数据库的操作。

96657d512c181c34d5fe17a2b8cd31a7.png

4、创建消息队列任务

以index模块为例,创建一个 /app/index/job/Task.php 文件(job目录也是手动创建),代码如下:

83eb8e9c5da47e423825c06ab850bacc.png

5、入队列(生产任务)

1). 有push()和later()两种方法,前者是立即执行,后者是延迟$delay秒后执行。

db288b71745831da8d7a26b0adbe2dc0.png

2). 调用later()方法,将该任务分配到group1队列里,延迟10秒执行

1c0899be7b0a41fe39556c63fd516c40.png

3). 调用之后,我们通过redis的远程管理工具会发现指定db库的队列里有对应的数据,说明完成了入队列

6、出队列(消费任务)

在项目根目录执行命令

966ba027118652160b2816975f9a3097.png

之后(其中group1为队列名),数据库成功写入一条数据。接下来开始安装和配置supervisor来守护该进程不断的执行任务。

二、supervisor的安装和配置

supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

yum安装supervisor:

0ac6b30fa6193ca1d53d8db63654077c.png

配置:

1、在这里我创建了一个命名为supervisor的目录用于存放supervisor和队列的日志文件以及include的配置文件,其目录结构为:

39f62a9254f7fcb6cafc952a7890e4df.png

2、然后找到/etc/supervisord.conf配置文件,编辑如下信息:

dcf28a76ce4e91aec4c82b268e9d979e.png

3、在/var/supervisor/conf目录里创建一个.conf文件,这里命名为queue_work.conf,内容如下:

对于index这个单模块而言,不同的业务逻辑为了区分可能会存在多个队列名,这种情况将多个队列名用逗号拼接起来:

dfc4bcb268a6241da7c71b8aed33d169.png

4、重启

3581fc9b0449eb847746938cb5c4b19c.png

01aa4895a00f07f39f1a9f12c9a07db4.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
think-queue是一个基于ThinkPHP5框架的消息队列扩展,可以将耗时的任务异步处理,提高系统的并发能力和稳定性。以下是think-queue的介绍和演示: 介绍: 1. think-queue的安装:可以通过composer安装,具体命令为:composer require topthink/think-queue。 2. think-queue的配置:需要在config/queue.php文件中进行配置,包括连接信息、队列名称、超时时间等。 3. think-queue的使用:可以通过php think queue:listen命令启动队列监听器,也可以通过php think queue:work命令启动队列处理器。 演示: 假设我们需要发送邮件,但是由于邮件发送需要连接SMTP服务器,因此会比较耗时。我们可以将邮件发送任务放入消息队列中异步处理,以提高系统的并发能力和稳定性。以下是一个简单的think-queue邮件发送示例: 1.定义邮件发送任务类: ```php namespace app\queue\job; use think\queue\Job; use PHPMailer\PHPMailer\PHPMailer; class SendMail { public function fire(Job $job, $data) { $mail = new PHPMailer(); // 邮件发送代码 if ($mail->send()) { // 邮件发送成功,删除任务 $job->delete(); } else { // 邮件发送失败,重新放入队列 $job->release(60); } } } ``` 2.将邮件发送任务加入消息队列: ```php use think\Queue; use app\queue\job\SendMail; // 将邮件发送任务加入消息队列 Queue::push(new SendMail($data)); ``` 3.启动队列监听器: ```shell php think queue:listen ``` 以上示例中,我们定义了一个SendMail类作为邮件发送任务,将其加入消息队列中异步处理。在fire方法中,我们使用PHPMailer类发送邮件,如果发送成功则删除任务,否则重新放入队列。最后,我们通过php think queue:listen命令启动队列监听器,等待任务的到来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值