Транзакции базы данных Laravel через цепочечные очереди (Horizon / Redis) - PullRequest
0 голосов
/ 19 апреля 2019

Я искал часы по этому поводу и думаю, что это может быть просто невозможно? Есть ли сбой задания в цепочке очередей, могу ли я откатить все транзакции базы данных, которые произошли до этого момента.

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

примечание: я знаю, что вышеупомянутое не будет работать при асинхронной передаче заданий в очередь, но есть ли способ получить этот эффект?

1 Ответ

0 голосов
/ 13 мая 2019

Поскольку работники очереди являются долгоживущими процессами, можно использовать транзакции базы данных в цепочечных заданиях очереди.

Что вам нужно сделать, это начать транзакцию по методу 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...
}

Вы можете зафиксировать вашу транзакцию в любом из связанных заданий.

...