thinkphp-queue处理延时任务事件

安装think-queue

  • 官方地址:https://github.com/top-think/think-queue
  • composer require topthink/think-queue
<?php
/**
 * Created by 老吴.
 * UserMsg:砥砺前行,扬帆起航
 * email:cwwx0128@qq.com
 * QQ:1113249273
 * QQ群:925283872
 * 微信:cww0128
 * Date: 2021/5/18
 * Time: 9:53
 */

namespace app\api\controller;

use app\admin\model\general\Basic;
use app\admin\model\order\OrderItem;
use app\admin\model\user\Withdrawal;
use app\common\model\ScoreLog;
use think\Db;
use think\Exception;
use think\Queue\Job;

class DoJob
{
    /**
     * fire方法是消息队列默认调用的方法
     * @param Job $job 当前的任务对象
     * @param $data 发布任务时自定义的数据
     * @return int
     */
    public function fire(Job $job, $data)
    {
    

        if (empty($data)) {
            return 0;
        }
		$isJobDone = false;
		// 业务部分START
        // 有些消息在到达消费者时,可能已经不再需要执行了
        $isJobDone = true;
		// 业务部分END

        /*根据次数处理删除逻辑START*/
//        $nums = $job->attempts();
//        if ($nums > 0) {
//            $job->delete();
//        }
//        $job->delete();
        /*根据次数处理删除逻辑END*/

        if ($isJobDone) {
            // 如果任务执行成功,删除任务
            $job->delete();
        } else {
            if ($job->attempts() > 3) {
                //通过这个方法可以检查这个任务已经重试了几次了
                $job->delete();
                // 也可以重新发布这个任务
                //$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行
            }
        }
    }

}

```bash

调用消息队列

**

$jobHandlerClassName = 'app\api\controller\DoJob';  //根据Dojob命名空间位置来编写,Dojob如上面的控制器所示
$data = ['user_id' => 3];
$ret = Queue::later(10, $jobHandlerClassName, $data, $queue = 'OrderTimeOut'); //延时执行
$ret = Queue::push($jobHandlerClassName, $data, $queue = 'OrderTimeOut');//立即执行

相关说明

  1. Queue::later //延时执行
  2. Queue::push//立即执行
  3. $queue 队列名称,可以为null,当有名称的时候,监听脚本: php think queue:listen --queue OrderTimeOut

————————————————
版权声明:本文为优快云博主「老师傅的心跳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_34050360/article/details/116986237

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值