如何将链式作业分派到 Lumen 6 中的队列?
How to dispatch chained jobs to a queue in Lumen 6?
在Laravel中,可以指定在主作业成功执行后应按顺序运行排列的作业列表。如果序列中的一个作业失败,则其余作业将不会 运行。 Laravel 文档显示这是通过在可调度作业上使用 withChain 方法来完成的,如本例所示:
ProcessPodcast::withChain([
new OptimizePodcast,
new ReleasePodcast
])->dispatch();
这在 Laravel 中对我来说效果很好,但是我使用的是 Lumen(Laravel 的轻量级子集)。
根据Lumen's documentation on queues、"Like many other parts of the framework, Lumen's queued jobs function identically to Laravel's queued jobs. So, to learn more about queuing jobs in Lumen, please review the full Laravel queue documentation."
Lumen 文档确实提到了与 Laravel 的一些细微差异,包括将作业分派到队列的方式的差异。它解释了 Lumen 中的作业可以使用调度函数或队列外观来调度:
dispatch(new ExampleJob);
Queue::push(new ExampleJob);
有这样的背景,请问在Lumen中有什么方法可以调度链式作业吗?我搜索 Google 好几天了,最接近我的问题的是这两个 link:
- This Stack Overflow post,准确描述了我的问题,但没有提供任何解决方案
- This Laracast thread,这表明
$this->dispatch( (new FillBruteFec($import))->chain(new FillRaiFec()) );
的语法对我也不起作用。
上面的 Stack Overflow link 解释了 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
trait 在 App\Jobs\Job class provides a chain 方法中使用,应使用 Job 实例数组 调用以创建作业链。
您可以 运行 一系列作业,方法是编写:
$this->dispatch(
(new CreateUser($username,$password))
->chain([
new SetForwarding($username,$forwardTo),
new EnableIncomingEmail($username),
new EnableOutgoingEmail($username),
new EnableImap($username)
])
);
在Laravel中,可以指定在主作业成功执行后应按顺序运行排列的作业列表。如果序列中的一个作业失败,则其余作业将不会 运行。 Laravel 文档显示这是通过在可调度作业上使用 withChain 方法来完成的,如本例所示:
ProcessPodcast::withChain([
new OptimizePodcast,
new ReleasePodcast
])->dispatch();
这在 Laravel 中对我来说效果很好,但是我使用的是 Lumen(Laravel 的轻量级子集)。
根据Lumen's documentation on queues、"Like many other parts of the framework, Lumen's queued jobs function identically to Laravel's queued jobs. So, to learn more about queuing jobs in Lumen, please review the full Laravel queue documentation."
Lumen 文档确实提到了与 Laravel 的一些细微差异,包括将作业分派到队列的方式的差异。它解释了 Lumen 中的作业可以使用调度函数或队列外观来调度:
dispatch(new ExampleJob);
Queue::push(new ExampleJob);
有这样的背景,请问在Lumen中有什么方法可以调度链式作业吗?我搜索 Google 好几天了,最接近我的问题的是这两个 link:
- This Stack Overflow post,准确描述了我的问题,但没有提供任何解决方案
- This Laracast thread,这表明
$this->dispatch( (new FillBruteFec($import))->chain(new FillRaiFec()) );
的语法对我也不起作用。
上面的 Stack Overflow link 解释了 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
trait 在 App\Jobs\Job class provides a chain 方法中使用,应使用 Job 实例数组 调用以创建作业链。
您可以 运行 一系列作业,方法是编写:
$this->dispatch(
(new CreateUser($username,$password))
->chain([
new SetForwarding($username,$forwardTo),
new EnableIncomingEmail($username),
new EnableOutgoingEmail($username),
new EnableImap($username)
])
);