6

我有工作要发送几封电子邮件。

在我的控制器中,我称之为工作:

dispatch(new SendStartPatEmail($data));

记录保存在表作业中。

但要执行这项工作,我必须php artisan queued:work手动运行。我怎样才能自动做到这一点?

4

4 回答 4

5

有很多不同的方法,都取决于您使用的环境。Laravel 倾向于推荐使用Supervisor来监控你的队列工作者并保持他们运行。

或者,您可能希望立即执行作业,而不是将它们添加到队列中。您可以通过sync在配置中将队列驱动程序设置为 来做到这一点:

配置/队列.php

'default' => env('QUEUE_DRIVER', 'sync'),

或在您的.env文件中(假设您的配置设置如上)

.env

QUEUE_DRIVER=sync
于 2018-06-21T11:30:35.973 回答
2

已经在这里回答了

是的,如果您使用 Linux,您可以使用例如将运行的主管php artisan queue:listen(您需要将此命令添加到主管配置文件),它将确保该命令一直运行。

于 2018-06-21T11:33:38.527 回答
0

php artisan queue:work是一个简单的命令,它监听队列并执行一些作业。

整个概念是什么?

您可以在后台运行这个简单的命令,队列中的所有作业都将被执行。
但是在后台运行进程 ( queue:work) 并不总是安全的。

为什么?因为总是有可能由于内存泄漏而终止或卡住进程。

在这种情况下,laravel 建议使用Supervisor 。supervisor是另一个像服务一样工作的进程。它负责检查php artisan queue:work创建的进程是否正常工作或是否应该重新启动。

这种方式php artisan queue:work在后台运行,但有一种机制(主管)可以在出现问题时重新启动进程

于 2018-06-21T11:46:30.117 回答
0

有一种dispatch_now( ... )方法可以指定您想要同步运行的那些作业。

我不关心下划线,所以我通常创建一个dispatchNow( ... )调用下划线版本的辅助方法..

于 2018-06-21T12:05:39.607 回答