假设我有一个调用某个作业的实体
就像当一个付款完成我想生成一个PDF卡的付款,所以
$payment = Payment::create([....]);
PaymentJob::dispatch($payment);
如果此作业失败或成功,我希望将状态(我有PaymentStatus模型)附加到付款
所以在我的工作中
public function handle()
{
// generate pdf
$pyament->Status()->create(['status'=>'success']);
}
public function failed(Throwable $exception)
{
$pyament->Status()->create(['status'=>'error']);
}
问题是每次付款应该只有1个状态成功或错误
如果我有3个重试每个作业在我的队列设置和作业前2个失败,最后一个成功,我将有3个不同的状态付款
基本上我想我的失败状态只会被创建,如果所有3次尝试都失败了,作业不再被处理
1条答案
按热度按时间wljmcqd81#
解决此问题的一种方法是使用标记来跟踪作业的付款状态。
1.调度PaymentJob时,请在付款上设置一个标志,以指示该作业处于挂起状态:
$payment = Payment::create([...]);$payment-〉status()-〉create(['status' =〉'pending']);paymentJob::dispatch($payment);
1.在PaymentJob的
handle()
方法中,更新付款状态以指示作业正在处理:public function handle(){ $payment = $this-〉payment;$payment-〉status()-〉update(['status' =〉'processing']);
}
1.在PaymentJob的
failed()
方法中,仅在作业三次重试均失败时更新付款状态以指示作业失败:public function failed(Throwable $exception){ $payment = $this-〉payment;
}