我有工作要发送几封电子邮件。
在我的控制器中,我称之为工作:
dispatch(new SendStartPatEmail($data));
记录保存在表作业中。
但要执行这项工作,我必须php artisan queued:work
手动运行。我怎样才能自动做到这一点?
我有工作要发送几封电子邮件。
在我的控制器中,我称之为工作:
dispatch(new SendStartPatEmail($data));
记录保存在表作业中。
但要执行这项工作,我必须php artisan queued:work
手动运行。我怎样才能自动做到这一点?
有很多不同的方法,都取决于您使用的环境。Laravel 倾向于推荐使用Supervisor来监控你的队列工作者并保持他们运行。
或者,您可能希望立即执行作业,而不是将它们添加到队列中。您可以通过sync
在配置中将队列驱动程序设置为 来做到这一点:
配置/队列.php
'default' => env('QUEUE_DRIVER', 'sync'),
或在您的.env
文件中(假设您的配置设置如上)
.env
QUEUE_DRIVER=sync
已经在这里回答了
是的,如果您使用 Linux,您可以使用例如将运行的主管
php artisan queue:listen
(您需要将此命令添加到主管配置文件),它将确保该命令一直运行。
php artisan queue:work
是一个简单的命令,它监听队列并执行一些作业。
整个概念是什么?
您可以在后台运行这个简单的命令,队列中的所有作业都将被执行。
但是在后台运行进程 ( queue:work
) 并不总是安全的。
为什么?因为总是有可能由于内存泄漏而终止或卡住进程。
在这种情况下,laravel 建议使用Supervisor 。supervisor是另一个像服务一样工作的进程。它负责检查php artisan queue:work
创建的进程是否正常工作或是否应该重新启动。
这种方式php artisan queue:work
在后台运行,但有一种机制(主管)可以在出现问题时重新启动进程
有一种dispatch_now( ... )
方法可以指定您想要同步运行的那些作业。
我不关心下划线,所以我通常创建一个dispatchNow( ... )
调用下划线版本的辅助方法..