通常,最大尝试次数在队列级别指定,如下所示:
php artisan queue:listen connection-name --tries=3
我希望能够在作业类中的作业级别上覆盖它(不影响其他作业)。
我可以想到三种方法来解决这个问题,但它们可能并不优雅:
- 在队列级别设置大量尝试次数
- 查看失败的队列并重试作业
- 失败时创建新作业
注意:
- 我的情况与通过 API 轮询有关。
- 我正在自己的模型中记录我的民意调查尝试。
尝试使用attempts()
方法检查作业类中的当前作业尝试。 如下所示。
class MyJobClass implements ShouldQueue
{
public function handle()
{
if ($this->attempts() < 3) {
// do job things
}
else {
// delete job
}
}
}
关于拉拉维尔存储库 https://github.com/laravel/framework/blob/5.3/src/Illuminate/Queue/InteractsWithQueue.php#L21 的参考
从 Laravel 5.4 开始,您可以在作业类上指定$tries
以覆盖该作业的尝试次数
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 5;
https://laravel.com/docs/5.7/queues#max-job-attempts-and-timeout