在 Laravel 中,可以指定在主作业成功执行后应按顺序运行的排队作业列表。如果序列中的一个作业失败,则不会运行其余作业。 Laravel 文档显示这是通过在可调度作业上使用 withChain 方法来完成的,如下例所示:
ProcessPodcast::withChain([
new OptimizePodcast,
new ReleasePodcast
])->dispatch();
这在 Laravel 中很适合我,但是我使用的是 Lumen(Laravel 的轻量级子集)。
根据Lumen's documentation on queues , “与框架的许多其他部分一样,Lumen 的队列作业功能与 Laravel 的队列作业相同。因此,要了解有关 Lumen 中的队列作业的更多信息,请查看完整的 Laravel 队列文档。”
Lumen 文档确实提到了与 Laravel 的一些细微差别,包括将作业分派(dispatch)到队列的方式的不同。它解释了 Lumen 中的作业可以使用调度函数或队列外观来调度:
dispatch(new ExampleJob);
Queue::push(new ExampleJob);
以此为背景,有没有办法在 Lumen 中调度链式工作?我已经搜索了谷歌好几天了,最接近我的问题的是这两个链接:
$this->dispatch( (new FillBruteFec($import))->chain(new FillRaiFec()) );
的语法这对我也不起作用。 上面的 Stack Overflow 链接解释了 Laravel 语法不起作用的原因是 Lumen 缺少
Illuminate\Foundation\Bus\Dispatchable
。特征。更复杂的事情是,我需要将一组不同的参数传递给我的每个作业——即 apparently challenging to do even in the full Laravel framework。 .
以下是我目前在我的 Lumen 应用程序中提交工作的方式(没有链接):
Queue::push(new CreateUser($username,$password));
Queue::push(new SetForwarding($username,$forwardTo));
Queue::push(new EnableIncomingEmail($username));
Queue::push(new EnableOutgoingEmail($username));
Queue::push(new EnableImap($username));
我想链接这些的主要原因是确保在修改该用户的任何后续作业之前成功创建用户记录。
那么,考虑到所有这些……怎么样?是否有可能在 Lumen 中链式工作?如果是这样,我会使用什么语法?
最佳答案
illuminate/bus/Queueable
App\Jobs\Job 中使用的特征类提供 chain应该使用 调用的方法一组作业实例 做一个工作链。
您可以通过编写以下代码来运行一系列作业:
$this->dispatch(
(new CreateUser($username,$password))
->chain([
new SetForwarding($username,$forwardTo),
new EnableIncomingEmail($username),
new EnableOutgoingEmail($username),
new EnableImap($username)
])
);
关于laravel - 如何将链式作业分派(dispatch)到 Lumen 6 中的队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59199476/