* @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; } }