如何使用Laravel Queue立即执行作业


How to execute a job immediately using Laravel Queue

我有一个发送电子邮件通知到用户邮箱的注册表单,我使用Laravel Queue来处理我所有的后台进程(例如Mail:: Queue…)。

我的问题是,假设我的表中有20个排队作业。我总是想优先处理所有的电子邮件邀请,我不想让它等待。这可能吗?但是我仍然想使用队列原则

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

请参阅Laravel文档中有关将作业分配到特定队列的链接。将作业推到队列中。查看"指定作业队列"。

设置完成后,您可以为队列分配优先级。请参阅以下链接到Laravel文档。运行队列侦听器。查看"队列优先级"。

引用自Laravel文档:

在这个例子中,高队列上的作业总是在从低队列转移到作业之前被处理。

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

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

ProcessPodcast::dispatchSync($podcast);

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