gpt4 book ai didi

Laravel - 按顺序运行作业

转载 作者:IT王子 更新时间:2023-10-29 06:12:47 26 4
gpt4 key购买 nike

我正在学习 Laravel,从事一个运行 Horizo​​n 以了解工作的项目。我被困在一个地方,我需要一个接一个地运行同一个工作几次。

这是我目前正在做的事情

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\Subscriptions;
class MailController extends Controller
{


public function sendEmail() {
Subscriptions::all()
->each(function($subscription) {
SendMailJob::dispatch($subscription);
});
}
}

这工作正常,除了它在多个 worker 上运行作业并且没有保证顺序。有什么办法可以一个接一个地运行作业?

最佳答案

正如您在问题中提到的,您正在寻找的是工作链。

From the Laravel docs

Job chaining allows you to specify a list of queued jobs that should be run in sequence. If one job in the sequence fails, the rest of the jobs will not be run. To execute a queued job chain, you may use the withChain method on any of your dispatchable jobs:

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

所以在你上面的例子中

$mailJobs = Subscriptions::all()
->map(function($subscription) {
return new SendMailJob($subscription);
});

Job::withChain($mailJobs)->dispatch()

应该给出预期的结果!

更新

如果您不想使用初始作业来链接(如上面的文档示例所示),您应该能够创建一个空的 Job 类,该类具有 use Dispatchable ;。那你可以用我上面的例子

关于Laravel - 按顺序运行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52992589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com