如何在不使用工匠或shell的情况下运行Laravel Queue?

时间:2017-09-06 09:41:42

标签: laravel laravel-5.4 artisan

我试过php artisan queue:work,它运行得很好,网站没有冻结,但如何通过Controller以编程方式运行?我运行Artisan:call('queue:work')但它冻结(等待队列完成)并结束网关超时,但队列成功运行。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

队列允许您推迟处理耗时的任务,例如发送电子邮件,直到稍后。

因此,从控制器执行队列工作程序实际上否定了队列的用途。解释您的确切用例以提供更多详细信息。

答案 1 :(得分:0)

在控制器功能

中尝试此操作
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');

}

在你的情况下,你需要做一些font-end hack,将这个控制器函数作为ajax运行并进行一些加载。在你的欲望时光过去之后停止装载。

这不是最佳方法,您不应该从控制器运行queue进程,您应该让服务器使用supervisor, etc…执行此过程 https://laravel.com/docs/5.1/queues#supervisor-configuration