[英]Laravel database transactions across chained queues (Horizon/Redis)
我已经搜索了几个小时,我想它可能根本不可能? 如果队列链中的作业失败,我是否可以回滚此时发生的所有数据库事务。
DB::transaction(function () {
ProcessPodcast::withChain([
new OptimizePodcast,
new ReleasePodcast
])->dispatch();
});
注意:我知道当异步将作业推送到队列时,上述操作无效,但有没有办法获得此效果?
由于队列工作者是长期存在的进程,因此可以在链式队列作业中利用数据库事务。
您需要做的是在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...
}
您可以在任何链接作业中提交事务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.