跨链队列的Laravel数据库事务(Horizo​​n / Redis)

时间:2019-04-19 16:38:40

标签: php laravel laravel-5 laravel-queue laravel-horizon

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

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

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

1 个答案:

答案 0 :(得分:0)

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

您需要做的是开始使用ProcessPodcast工作的handle方法进行交易,同时确保如果链失败,您回滚

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

您可以提交任何链式作业中的交易。