gpt4 book ai didi

laravel - 在 Laravel 中,如何控制 Job 是通过队列处理还是同步处理

转载 作者:行者123 更新时间:2023-12-02 20:59:31 32 4
gpt4 key购买 nike

我为我的大部分“业务交易”编写了 Jobs,结果证明它在干净、可读的架构方面运行良好。

在作业本身中,我必须决定作业在我的代码中分派(dispatch)后是否应该同步运行或通过队列运行。

大多数时候我可以清楚地决定什么最适合一份工作。尽管如此,在某些情况下,在继续进一步的流程之前,必须知道任务已完成。有时,将任务排队是可以的,因为没有依赖关系。

在这种情况下,我希望能够在我的代码中控制此流程。

例如通过这样做

$this->dispatch(new MyJob());

使用默认方式

$this->queue(new MyJob())$this->run(new MyJob()) 强制采用任一方式。

这是否有可能,或者我对这个话题完全感到困惑吗?

最佳答案

至少在 Laravel 5.2 中,我认为你可以通过使用 dispatchdispatchNow 来做到这一点。

DispatchesJobs 特征提供了这两种方法,而这些方法又遵循 Illuminate\Bus\Dispatcher 实现。

您应该创建一个可排队的作业,因为它实现了 ShouldQueue 接口(interface):

class MyJob extends Job implements ShouldQueue
{
// ...
}

现在,当需要将作业分派(dispatch)到队列时,您可以运行:

$this->dispatch(new MyJob());

或者,如果您想立即分派(dispatch)作业,而不是让它排队,您可以运行:

$this->dispatchNow(new MyJob());

或者,如果您想沿着这条路线走下去,您可以随时创建作业的可排队和不可排队版本。通过扩展不可排队作业并实现 ShouldQueue 接口(interface),您可以轻松地做到这一点,而无需重复自己。

class MyJob extends Job
{
public function handle()
{
// Write your implementation
}
}

class MyQueueableJob extends MyJob implements ShouldQueue
{
// No need to write an implementation since it extends MyJob
}

关于laravel - 在 Laravel 中,如何控制 Job 是通过队列处理还是同步处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39023730/

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