安装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');//立即执行
相关说明
- Queue::later //延时执行
- Queue::push//立即执行
- $queue 队列名称,可以为null,当有名称的时候,监听脚本: php think queue:listen --queue OrderTimeOut
————————————————
版权声明:本文为优快云博主「老师傅的心跳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_34050360/article/details/116986237