跨链式队列(Horizon/Redis)的Laravel数据库事务



我已经搜索了几个小时,我想这可能根本不可能?是 如果队列链中的作业失败,我是否可以回滚到目前为止发生的所有数据库事务。

DB::transaction(function () {
   ProcessPodcast::withChain([
       new OptimizePodcast,
       new ReleasePodcast
   ])->dispatch();
});

注意:我知道在异步将作业推送到队列时上述内容不起作用,但是有没有办法获得这种效果?

由于队列工作线程是长期进程,因此可以在链式队列作业中使用数据库事务。

您需要做的是在作业handle方法上开始ProcessPodcast事务,同时确保在链发生故障时回滚

// ProcessPodcast parent Job
use DB; // above class, of course
public function handle()
{
    DB::beginTransaction();
}
public function failed(Exception $exception)
{
    DB::rollback();
    // Send user notification of failure, etc...
}

您可以在任何链接作业中提交事务。

相关内容

  • 没有找到相关文章

最新更新