0

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

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

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

4

1 回答 1

0

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

您需要做的是在作业的方法上开始事务,同时确保在链失败时回滚。ProcessPodcasthandle

// 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...
}

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

于 2019-05-13T03:10:55.103 回答