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月30日T15: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]
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。