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

时间:2019-12-05 16:29:24

标签: laravel lumen laravel-queue

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

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

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

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

dispatch(new ExampleJob);

Queue::push(new ExampleJob);

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

上面的堆栈溢出链接说明,Laravel语法不起作用的原因是流明缺少Illuminate\Foundation\Bus\Dispatchable特性。

更复杂的事情是,我需要将一组不同的参数传递给我的每个作业-This Laracast thread

这是我当前在我的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连锁工作是否有可能?如果是这样,我将使用什么语法?

1 个答案:

答案 0 :(得分:0)

App\Jobs\Job类中使用的

illuminate/bus/Queueable特性具有提供的chain方法,应使用一系列Job实例对其进行调用以完成工作链。

您可以通过编写以下命令来运行一系列作业:

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