具有单个最大尝试次数的排队作业,如何?



通常,最大尝试次数在队列级别指定,如下所示:

php artisan queue:listen connection-name --tries=3

我希望能够在作业类中的作业级别上覆盖它(不影响其他作业)。

我可以想到三种方法来解决这个问题,但它们可能并不优雅:

  1. 在队列级别设置大量尝试次数
  2. 查看失败的队列并重试作业
  3. 失败时创建新作业

注意:

  1. 我的情况与通过 API 轮询有关。
  2. 我正在自己的模型中记录我的民意调查尝试。

尝试使用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

最新更新