job文件内容如下:
namespace app\job;
use app\log\Log;
use think\queue\Job;
class Test{
public function fire(Job $job, $data){
//这里执行具体的任务
if ($job->attempts() < 3) {
//通过这个方法可以检查这个任务已经重试了几次了
$insertData = [
'request' => json_encode($data),
'type' => 'fire',
'time' => Log::getMsecTime(),
];
$data = [];
foreach ($insertData as $key=>$val){
$data[] = '`'.$key.'` = '.'\''.$val.'\'';
}
$insertStr = implode(',', $data);
$sql = 'INSERT INTO `text` SET '.$insertStr;
if(!app('db')->execute($sql)){
self::failed($data);
// $job->release(1); //$delay为延迟时间
}
}
//如果任务执行成功后 记得删除任务,不然这个任务会重复执行,直到达到最大重试次数后失败后,执行failed方法
$job->delete();
}
public function failed($data){
// ...任务达到最大重试次数后,失败了
$insertData = [
'request' => json_encode($data),
'type' => 'failed',
'time' => Log::getMsecTime(),
];
$data = [];
foreach ($insertData as $key=>$val){
$data[] = '`'.$key.'` = '.'\''.$val.'\'';
}
$insertStr = implode(',', $data);
$sql = 'INSERT INTO `text` SET '.$insertStr;
app('db')->execute($sql);
}
}使用队列方式一:Queue::push('app\job\Test', $data = '111', $queue = 'redis');方式二:\queue('app\job\Test', '111');runtime显示报错信息:[2019-04-30T15:47:40+08:00][ error ] [0]Argument 2 passed to think\queue\Worker::process() must be an instance of think\queue\Job, null given, called in E:\Xampp\WWW\tp\vendor\topthink\think-queue\src\queue\Worker.php on line 261[E:\Xampp\WWW\tp\vendor\topthink\think-queue\src\queue\Worker.php:296] 最佳答案