[英]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.