我試過php artisan queue:work
,它運行的很好,網站沒有凍結,但是如何通過Controller以編程方式運行?我運行Artisan:call('queue:work')
但它凍結(等待隊列完成)並導致網關超時,但隊列成功運行。如何在不使用工匠或shell的情況下運行Laravel隊列?
有什麼建議嗎?
我試過php artisan queue:work
,它運行的很好,網站沒有凍結,但是如何通過Controller以編程方式運行?我運行Artisan:call('queue:work')
但它凍結(等待隊列完成)並導致網關超時,但隊列成功運行。如何在不使用工匠或shell的情況下運行Laravel隊列?
有什麼建議嗎?
在你的控制器功能
use Symphony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessTimedOutException;
try {
$process = new Process(your artisan command,
null,
your environment,
[],
timeout(ex: 60000),[]);
$process->run();
} catch (ProcessTimedOutException $e) {
// you can show some flash message
// OR
return Response::json(['message' => 'some message'], 'desire response code');
}
在你的情況試試這個,你需要做一些字體端砍,運行該控制器功能的AJAX,並提出一些負載。在你想要的時間過後,停止加載。
這不是一個最好的辦法,你不應該運行從控制器queue
過程中,你應該讓你的服務器來做這個過程中通過使用supervisor, etc…
https://laravel.com/docs/5.1/queues#supervisor-configuration
隊列允許你推遲的處理耗時任務,例如發送電子郵件,直到晚些時候。
因此,從控制器執行隊列工作者實際上否定了隊列的用途。解釋您的確切用例以提供更多詳細信息。
使用Laravel 5.5在這裏..我想記錄工作(可讀的形式保存在工作表中可能是)信息**之前**它被刪除時,從工匠運行(使用shouldQueue使電子郵件作業)。爲此,我計劃從控制器執行作業隊列。我可能錯了,是否有方法記錄數據庫中的每個作業。我從隊列類方法中記錄失敗。我可能是錯的,歡迎任何幫助。 –