我试过php artisan queue:work
,它运行得很好,网站没有冻结,但如何通过Controller以编程方式运行?我运行Artisan:call('queue:work')
但它冻结(等待队列完成)并结束网关超时,但队列成功运行。
有什么建议吗?
答案 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