2016-12-02 47 views
1

通常情况下,最大的尝试都将在队列级别指定的,像这样:排队工作与个人最大尝试次数,如何?

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

我希望能够覆盖这个(不影响其他工作)对工作类中的工作水平。

我能想到的三种方式去了解这一点,但他们可能不优雅:

  1. 设置大量尝试的队列水平
  2. 查找到故障队列并再试作业
  3. 创建失败时新的工作

注:

  1. 我的情况与通过API进行轮询相关。
  2. 我在我自己的模型中记录了我的投票尝试。

回答

2

尝试使用attempts()方法来检查作业类中的当前作业尝试。像下面的东西。

class MyJobClass implements ShouldQueue 
{ 

    public function handle() 
    { 
     if ($this->attempts() < 3) { 
      // do job things 
     } 
     else { 
      // delete job 
     } 
    } 
} 

参考上laravel库https://github.com/laravel/framework/blob/5.3/src/Illuminate/Queue/InteractsWithQueue.php#L21

+0

每次尝试仍计入--tries设置没有?这意味着在你的例子中需要设置的项大于“3”。因此,队列中的所有工作都将受到影响。 如果有办法将作业释放回队列中而不计算尝试次数,则其他作业不会受到影响。 –

+0

你可以在'else'上添加'$ this-> delete()'来删除作业,所以它不会继续尝试,直到最大计数 – xmhafiz