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( ... )
..
我有工作要发送几封电子邮件。
在我的控制器中调用作业:
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( ... )
..