2015-02-24 134 views
1

我正在運行Laravel和Beanstalkd隊列驅動程序。我有一些長時間運行的工作,我遇到了一個問題,大約60秒左右後,工作將從保留狀態轉回就緒狀態。該作業仍在運行並完成而沒有問題。問題是,如果添加了另一個作業,它將不會運行,而是返回到就緒的前一個作業將運行。如果在添加另一個作業之前完成作業,則不是問題。Beanstalkd作業切換到「就緒」狀態

這是我的代碼。

隊列推:

Queue::push('myApp\Processors\BuildQuick', $job); 

工作代碼:

public function fire($job, $data) { 
     try { 
     //some code here that calls another class to build an amazon ec2 
     } catch (\Exception $ex) { 
      \Logging::joblog($ex->getMessage(), "ERROR"); 
      $job->delete(); 
      return; 
     } 
     } 

     $job->delete(); 
     \Logging::joblog("Job Completed Successfully", "INFO"); 
    } 

更新: 我有一個睡眠計時器測試這一點,它發生在每一次正好1分鐘。我知道它沒有拋出任何異常,我所有的代碼都是2分鐘睡眠。

回答

1

我終於發現是什麼導致了這個問題!

https://github.com/laravel/framework/issues/3480

這laravel 4.1加入我沒有knwo這個存在。您必須更改隊列配置中的默認ttr。希望這可以幫助別人!

+0

總之,默認的'ttr'(運行時間)默認爲60秒。如果您有任何可能需要更長時間的工作,則需要在初始配置中添加一個「ttr」=> {number-of-seconds}。目前還沒有一種官方的,清潔的方式來設置每個工作崗位的TTR。 – 2015-02-25 11:58:32