* @version : HuoMp 1.0
*/
namespace huolib\queue\job;
use huo\controller\finance\Settle;
use huolib\status\SettleStatus;
use think\Log;
use think\queue\Job;
class SettleFire extends Fire {
static $g_i = 0;
/**
* fire方法是消息队列默认调用的方法
*
* @param Job $job 当前的任务对象
* @param array|mixed $data 发布任务时自定义的数据
*/
public function fire(Job $job, $data) {
if ($job->attempts() > 1) {
$job->delete();
}
self::$g_i++;
$_is_job_done = $this->doJob($data);
$runtime = round(microtime(true) - THINK_START_TIME, 10);
echo $runtime.' '.self::$g_i;
if ($_is_job_done) {
//如果任务执行成功, 记得删除任务
$job->delete();
// print("Hello Job has been done and deleted"."\n");
} else {
if ($job->attempts() > 3) {
//通过这个方法可以检查这个任务已经重试了几次了
// print("Hello Job has been retried more than 3 times!"."\n");
$job->delete();
// 也可以重新发布这个任务
// print("Hello Job will be availabe again after 2s."."\n");
//$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行
}
}
}
/**
* 根据消息中的数据进行实际的业务处理
*
* @param array $data 发布任务时自定义的数据
*
* @return bool 任务执行的结果
*/
public function doJob($data) {
$_rs = (new Settle())->withdrawQueue($data);
if (SettleStatus::NO_ERROR != $_rs['code']) {
Log::write(
"func=".__FUNCTION__."&class=".__CLASS__."step=".self::$g_i."&msg=".json_encode($_rs),
LOG::QUEUE
);
// return false;
}
return true;
}
}