同步运行 Laravel 作业链

Dan*_*iel 3 laravel laravel-queue laravel-5.8

我有一个像这样的 Laravel 工作链

Job1::withChain([
  new Job2(),
  new Job3(),
  new Job4()
])->dispatch();
Run Code Online (Sandbox Code Playgroud)

有时我希望它同步运行作业。

但是当我更改->dispatch()为时->dispatchNow(),我得到

调用未定义的方法 Illuminate\Foundation\Bus\PendingChain::dispatchNow()

还有其他方法可以同步运行作业链吗?

Del*_*lan 7

您可以使用该allOnConnection方法并在连接上运行它们sync

Job1::withChain([
  new Job2(),
  new Job3(),
  new Job4()
])->dispatch()->allOnConnection('sync');
Run Code Online (Sandbox Code Playgroud)

只需检查文件中的连接driver确实是.syncconfig/queue.php'sync'

另一种选择(当您想要在同步运行作业与异步运行作业之间轻松“切换”时并不理想)是一个接一个地分派它们,例如:

Job1::dispatchNow();
Job2::dispatchNow();
Job3::dispatchNow();
Job4::dispatchNow();
Run Code Online (Sandbox Code Playgroud)