Laravel - 自动执行排队的作业

Laravel - Execute queued job automatically

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

在我的控制器中调用作业:

dispatch(new SendStartPatEmail($data));

记录保存在 table 个作业中。

但是要执行作业,我必须 运行 php artisan queued:work 手动执行。 我怎样才能自动执行此操作?

有很多不同的方法,具体取决于您使用的环境。 Laravel 倾向于推荐使用 Supervisor 来监控你的队列工作人员并让他们 运行.

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

config/queue.php

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

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

.env

QUEUE_DRIVER=sync

已回答here

Yes, if you use Linux you can use for example supervisor which will run php artisan queue:listen (you need to add this command to supervisor configuration file) and it will make sure all the time this command is running.

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

整个概念是什么?

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

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

在这种情况下laravel建议使用Supervisor。supervisor是另一个进程,工作方式类似于service.It,负责检查进程是否php artisan queue:work 创建,正常工作或应该重新启动。

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

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

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