如何将链接作业分派到流明 6 中的队列?



在 Laravel 中,可以指定在主作业成功执行后应按顺序运行的排队作业列表。如果序列中的一个作业失败,则不会运行其余作业。Laravel文档显示,这是通过在可调度作业上使用withChain方法来实现的,如以下示例所示:

ProcessPodcast::withChain([
new OptimizePodcast,
new ReleasePodcast
])->dispatch();

这在拉拉维尔对我来说效果很好,但是我使用的是Lumen(拉拉维尔的轻量级子集(。根据Lumen
关于队列的文档,"与框架的许多其他部分一样,Lumen的队列作业与Laravel的排队作业功能相同。因此,要了解有关在Lumen排队工作的更多信息,请查看完整的Laravel队列文档。

Lumen文档确实提到了与Laravel的一些细微差异,包括将作业发送到队列的方式不同。 它解释了 Lumen 中的作业可以使用调度功能或队列外观进行调度:

dispatch(new ExampleJob);
Queue::push(new ExampleJob);

以此为背景,有没有办法在流明中调度链式作业? 我已经在谷歌上搜索了好几天,与我的问题最接近的是这两个链接:

  • 这篇堆栈溢出帖子,它准确地描述了我的问题,但没有提供任何解决方案
  • 这个 Laracast 线程,它建议了一种对我也不起作用的$this->dispatch( (new FillBruteFec($import))->chain(new FillRaiFec()) );语法。

上面的堆栈溢出链接解释了Laravel语法不起作用的原因是Lumen缺少IlluminateFoundationBusDispatchable特征。

更复杂的是,我需要为我的每个工作传递一组不同的参数 - 即使在完整的Laravel框架中,这显然也具有挑战性。

以下是我目前在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));

我想链接这些的主要原因是确保在修改该用户的任何后续作业之前成功创建用户记录。

所以,考虑到所有这些...怎么样? 在流明中连锁工作是否有可能? 如果是这样,我将使用什么语法?

App\Jobs\Job 类中使用的illuminate/bus/Queueable特征提供了一个链方法,应该使用作业实例数组调用该方法以创建作业链。

您可以通过编写以下内容来运行作业链:

$this->dispatch(
(new CreateUser($username,$password))
->chain([
new SetForwarding($username,$forwardTo),
new EnableIncomingEmail($username),
new EnableOutgoingEmail($username),
new EnableImap($username)
])
);

最新更新