关于tp6中消息队列的使用研究

本文档介绍了如何在ThinkPHP框架中使用消息队列。首先通过composer安装thinkphp-queue,然后配置queue.php文件。接着,在app目录下创建job目录并定义消息队列任务,如Test类,包含fire方法进行实际业务处理。生产者通过Queue::push方法将任务推送到队列,启动消息队列监听或工作进程。当任务执行成功或达到重试次数上限时,删除任务。
摘要由CSDN通过智能技术生成

tp消息队列的使用

  1. 文档地址:消息队列文档地址:https://github.com/qmister/think-queue/tree/master/doc
  2. composer安装命令:composer install thinkphp-queue
  3. 安装后会在tp的config文件夹下生成queue.php这个配置文件
    在这里插入图片描述
  4. 在app目录下创建job目录,用来放消息队列任务
  5. 创建任务如下
namespace app\job;

use think\queue\Job;

class Test {

    public function fire(Job $job, $data) {
        writeLog($data, 'test', 'job_test');
        $isJobDone = $this->doTest($data);
        if ($isJobDone) {
            //如果任务执行成功,记得删除任务
            echo "删除任务开始" . $job->attempts() . '\n';
            $job->delete();
        } else {
            //通过这个方法可以检查这个任务已经重试了几次了
            if ($job->attempts() > 3) {
                writeLog('已执行失败3次了', 'test', 'job_test');
                $job->delete();
            }
        }
    }
    /**
     * 根据消息中的数据进行实际的业务处理...
     * @param array $data
     * @return bool
     */
    private function doTest(array $data) {
        $data['xcz'] = '测试消息队列处理';
        writeLog($data, 'test', 'job_test');
        echo "测试消息队列";
        return true;
    }


}
  1. 添加生产者
public function index(){
        // 1.当前任务将由哪个类来负责处理。
        // 当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法
        $jobHandlerClassName = 'app\job\Test@fire';
        // 2.当前任务归属的队列名称,如果为新队列,会自动创建
        $jobQueueName = "jobTest";
        // 3.当前任务所需的业务数据 . 不能为 resource 类型,其他类型最终将转化为json形式的字符串
        // ( jobData 为对象时,需要在先在此处手动序列化,否则只存储其public属性的键值对)
        $jobData = ['ts' => time(), 'bizId' => uniqid(), 'a' => 1,'dates'=>date("Y-m-d H:i:s")];
        // 4.将该任务推送到消息队列,等待对应的消费者去执行
        $isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
//        $isPushed = Queue::later(10, $jobHandlerClassName, $jobData, $jobQueueName);
        // database 驱动时,返回值为 1|false  ;   redis 驱动时,返回值为 随机字符串|false
        if ($isPushed !== false) {
            echo '推送成功';
        } else {
            echo '推送失败';
        }
    }

8.消息队列启动命令:
php think queue:listen --queue jobTest或者php think queue:work --queue jobTest

如果任务出现内存不足和超时,可改为:
think queue:work --queue jobTest--memory=1024 --timeout=0
访问生产者产生如下图效果
执行效果
添加守护进程如下图
在这里插入图片描述

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值