composer 安装实现 think-queue基于Thinkphp5.1

1.composer命令安装依赖
composer require topthink/think-queue 2.0.4
2.查看依赖是否安装成功
php think queue:work -h
3.依赖文件存在位置
在这里插入图片描述
4.此消息队列基于Redis,所以php的redis扩展必须+Redis也必须安装
5.消息队列和Redis配置文件
TP5.1直接放在根目录的Config目录下
在这里插入图片描述

<?php

return [
    'connector'  => 'Redis',
    'expire'     => null,   // 任务过期时间,默认为60秒,若要禁用,则设置为 null
    'default'    => 'default',  // 默认的队列名
    'host'       => '127.0.0.1',   // redis 主机ip
    'port'       => 6379,   // redis 端口
    'password'   => '',   // redis 密码
    'select'     => 0,   // 使用哪里一个 db,默认为 db0
    'timeout'    => 0,   // redis 连接的超时时间
    'persistent' => false,   // 是否是长连接
];

6.生产者,将数据添加到redis消息队列中

<?php

namespace app\index\controller;

use think\Controller;
use think\Queue;
use think\cache\driver\Redis;

class Test extends Controller
{
    // 生产者,添加消息队列
    public function addQueue()
    {
        // 消息队列名
        $queueName = 'testQueue';
        //执行数据是数组
        //每次20个
        $dataold = range(6241,30000);
        $data=array_chunk($dataold,1);
        // 推入消息队列,注意这里的 ::class 是PHP5.5才有的写法
        foreach($data as $key=>$val){
            $isPushed = Queue::push(Testqueue::class, $val, $queueName);
        }
        // PHP5.5以下的可以直接写命名空间
        // $isPushed = Queue::push('app\common\queue\TestQueue', $data, $queueName);
        //$redis=new redis();

        if ($isPushed !== false) {
            // 成功之后的业务
            echo '队列加入成功';
        } else {
            // 失败之后的业务
            echo '队列加入失败';
        }
    }
}

7.消费者,调用方法做具体处理

<?php

namespace app\index\controller;

use think\Controller;
use think\Log;
use think\queue\Job;
use app\index\controller\Admin;

class Testqueue extends Controller
{
    // 消费者执行入口
    public function fire(Job $job, $data)
    {
        // 具体执行业务
        $isJobDone = $this->doJob($data);

        if ($isJobDone) {
            // 消息队列执行成功,删除队列,否则会一直执行
            $job->delete();
        } else {
            // 消息队列执行失败
            // 获取消息队列已经重试了几遍
            $attempts = $job->attempts();
            if ($attempts == 0 || $attempts == 1) {
                // 重新发布,参数 delay 是延时发布的时间
                $job->release(2);
            }
        }
    }

    // 消息队列执行失败后会自动执行该方法
    public function failed($data)
    {
        Log::error('max_false:' . json_encode($data));
    }

    // 消息队列执行方法
    public function doJob($data)
    {
        // 具体执行业务
        //调用接口
        $Admin = new admin();
        $return = $Admin->composeInput($data);
        $returnpd=json_encode($return);
        $data = json_encode($data);
        echo '+++dataArray2+++:' . $data;
        // 这里的判断条件以具体业务是否执行成功进行判断
        if ($returnpd) {
            echo "+++success+++";
            return true;
        } else {
            echo "+++false+++";
            return false;
        }
    }
}

8.开启队列监听
php think queue:work --daemon --queue testQueue
其中testQueue为消息队列名称,在生产者代码中指定
拓展:如果你想关闭终端还能继续消费,如下
nohup php think queue:listen --queue 队列名 &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值