【问题标题】:Laravel database transactions across chained queues (Horizon/Redis)跨链队列(Horizo​​n/Redis)的 Laravel 数据库事务
【发布时间】:2019-04-19 16:38:39
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    您需要做的是在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...
    }
    

    您可以在任何连锁作业中提交您的交易。

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 2022-10-20
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多