如何使用 Laravel 队列立即执行作业

How to execute a job immediately using Laravel Queue

我有一个注册表单,它向用户电子邮件发送电子邮件通知,我使用 Laravel 队列处理我的所有后台进程(例如 Mail::queue...)。

我的问题是,假设我的 table 中有 20 个排队的作业。而且我总是想首先优先处理所有电子邮件邀请,我不想让它等待。这可能吗?不过我还是想用队列原理。

您可以设置多个队列。例如,一个用于低优先级的后台作业,一个用于高优先级的电子邮件。

请参阅 Laravel 文档中关于将作业分配给特定队列的 link。 Pushing Jobs Onto The Queue。查看 'Specifying The Queue For A Job'.

完成此设置后,您可以为队列分配优先级。请参阅 link 到 Laravel 文档。 Running The Queue Listener。查看 'Queue Priorities'.

引自 Laravel 文档:

In this example, jobs on the high queue will always be processed before moving onto jobs from the low queue.

如果不想排队作业,您也可以使用同步调度立即执行作业。

来自文档 - https://laravel.com/docs/9.x/queues
同步调度 如果您想立即(同步)调度作业,您可以使用 dispatchSync 方法。使用此方法时,作业不会排队,会在当前进程内立即执行:

ProcessPodcast::dispatchSync($podcast);

为不同类型的工作流设置多个队列是一种确定工作优先级和异步执行的方法,但它不会立即生效,因为这些队列在某些时候会有多个待处理的作业。不建议将同步调度用于复杂的作业,因为它会阻塞请求和线程。