我为大多数“业务交易”写了乔布斯,结果表明,在干净,可读的架构方面工作得很好。
在Job本身,我要决定一旦在我的代码中调度,Job应该同步运行还是通过队列运行。
大多数时候,我可以清楚地决定什么最适合工作。尽管如此,在我可以继续进一步处理之前,我知道任务已经完成的情况很重要。有时,可以将任务排队,因为没有依赖项。
在这种情况下,我希望能够在我的代码中控制这个流程。
例如,通过
$this->dispatch(new MyJob());
使用默认方式和
$this->queue(new MyJob())
或$this->run(new MyJob())
强迫任何一种方式。
这在某种程度上是可能的,还是我对这个话题完全感到困惑?
答案 0 :(得分:1)
在Laravel 5.2中,至少我认为您可以使用dispatch
或dispatchNow
执行此操作。
DispatchesJobs
特征提供了这两种方法,而这些方法又遵循Illuminate\Bus\Dispatcher
实施。
您应该创建一个可排队的作业,因为它实现了ShouldQueue
接口:
class MyJob extends Job implements ShouldQueue
{
// ...
}
现在,在将作业分派到队列时,您可以运行:
$this->dispatch(new MyJob());
或者,如果您希望立即调度作业,而不是让它排队,您可以运行:
$this->dispatchNow(new MyJob());
或者,如果您想沿着该路线前进,您可以随时创建作业的可排队和不可排队版本。您可以通过扩展不可排队的作业并实现ShouldQueue
接口来轻松完成此操作而无需重复自己。
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
}