如何在Lumen 6中将链接的作业分配到队列?

问题描述 投票:3回答:1

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

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

这在Laravel中对我来说效果很好,但是我正在使用Lumen(Laravel的轻量级子集)。根据Lumen's documentation on queues,“与框架的许多其他部分一样,Lumen的排队作业的功能与Laravel的排队作业相同。因此,要了解有关Lumen排队作业的更多信息,请查看完整的Laravel排队文档。”

Lumen文档的确提到了与Laravel的一些细微差别,包括在将工作分配到队列的方式上的差别。它说明可以使用调度功能或Queue门面来调度流明中的作业:

dispatch(new ExampleJob);

Queue::push(new ExampleJob);

以此为背景,有没有办法在流明派遣连锁工作?我已经搜寻Google数天了,与我的问题最接近的匹配项是这两个链接:

  • This Stack Overflow post,它准确地描述了我的问题,但不提供任何解决方案
  • [This Laracast thread,这表明$this->dispatch( (new FillBruteFec($import))->chain(new FillRaiFec()) );的语法也对我不起作用。

[上面的堆栈溢出链接说明,Laravel语法不起作用的原因是流明缺少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连锁工作是否有可能?如果是这样,我将使用什么语法?

laravel lumen laravel-queue
1个回答
1
投票

C0]类中使用的[illuminate/bus/Queueable特性具有提供的App\Jobs\Job方法,应使用作业实例数组进行调用以创建作业链。

您可以通过书写来完成一系列工作:

chain
© www.soinside.com 2019 - 2024. All rights reserved.