think-queue
Queue::later不好用 没有延迟执行而是立即执行了
public function queuelater($orderid)
{
echo date("Y-m-d H:i:s");
$queue=Queue::later(60, 'app\common\job\TimeoutOrder', ['orderid' => $orderid],$queue = 'OrderSure');
if($queue){
echo '异步执行成功';
}else{
echo '异步执行失败';
}
}
任务方法
<?php
namespace app\common\job;
use think\queue\Job;
use think\Db;
use think\facade\Log; // 导入Log门面
class TimeoutOrder
{
// 任务执行的逻辑
public function fire(Job $job, $data)
// public function push(Job $job, $data)
{
// 获取订单ID
$orderid = $data['orderid'];
// sleep(60);
$order = Db::table('re_reserve_order')->where('id', $orderid)->find();
if ($order) {
Db::table('re_reserve_order')
->where('id',$orderid)
->update(['is_status' => 5,'agree'=>0]); // 更改订单状态为已确认
}
if ($job->attempts() > 3) {
//通过这个方法可以检查这个任务已经重试了几次了
echo 'AAA';
}
// 删除任务标记,表示任务已完成
$job->delete();
}
public function handle(Job $job, $data)
{
Log::record('Task started at: ' . date('Y-m-d H:i:s'), 'info'); // 输出任务开始时间
// 任务执行代码...
}
}
配置文件
return [
'default' => 'redis',
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'queue' => 'default',
'table' => 'jobs',
],
'redis' => [
'driver' => 'redis',
'queue' => 'default',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 1,
'timeout' => 0,
'persistent' => false,
'type'=>'redis',
],
],
'failed' => [
'type' => 'none',
'table' => 'failed_jobs',
],
];
试过了很多次都是同步立即执行了,不知道是什么原因