2016-08-17 136 views
0

這可能是一個非常微不足道的/新手問題。我已經開始在我的一個控制器功能中使用Laravel Queue;但是,當我派遣工作時,我必須等待隊列完成才能讓我繼續使用該功能。我認爲隊列背後的全部概念是它可以讓你在後臺處理耗時的任務,因此你可以繼續使用其他功能。如何避免等待Laravel隊列並繼續使用功能

這是我的控制器看起來像:

public function postCreate(Request $request) 
{ 
    // Validate Request 
    $this->validate($request, $this->rules()); 

    // I have to wait for this to finish before it lets me continue 
    // I want this to be processed in the background instead 
    $this->dispatchFrom('App\Jobs\GenerateReport', $request); 

    return json_encode([ 
     'html' => '<p>some html</p>' 
    ]); 
} 

回答

6

如果確實腳本在線處理,而不是脫機工作,我最好的猜測是,你正在使用的同步驅動程序的隊列,這立即處理作業並阻止。

檢查config/queue.php文件以查看「默認」配置值設置爲什麼,默認情況下它應該爲:env('QUEUE_DRIVER', 'sync')。如果是這種情況,那麼這是正確的,那麼看看你的.env文件,並確保你有一個環境變量設置爲QUEUE_DRIVER

如果QUEUE_DRIVER變量在您的.env文件中設置爲「sync」,那麼您正在使用同步驅動程序。如果完全沒有設置,那麼queue.php文件中的該行表示它將回退到同步驅動程序。

如果所有這些都是真的,只需使用您希望使用的驅動程序更新環境變量,並確保在config/queue.php文件中更新該驅動程序的配置選項。

希望有幫助!