Многократная дБ транзакция в одной очереди laravel 6.5.0 - PullRequest
0 голосов
/ 07 января 2020

Кто-нибудь имеет опыт использования задания laravel с несколькими транзакциями базы данных в одной очереди? laravel поддерживает это. У меня есть проблема, у меня есть 2 разных подключения к базе данных, а именно база данных A и база данных B, когда я отправляю свою первую работу с использованием базы данных A, все работает, все мои данные вставляются правильно, но когда я отправляю свою вторую работу с использованием базы данных B, транзакция не фиксируется и данные вообще не вставляются, мне нужно перезапустить рабочий, после чего он снова заработает. я использую redis в качестве драйвера очереди.

Транзакция базы данных A

$valid = true;
DB::beginTransaction();
try {
   //some logic happen here if got error $valid will be false

   //if valid true commit else rollback
   $valid ? DB::commit() : DB::rollback();
} catch (Exception $e) {
  $valid = false;
  DB::rollback();
}

Транзакция базы данных B

$valid = true;
DB::beginTransaction('b-connection');
try {
   //some logic happen here if got error $valid will be false

   //if valid true commit else rollback
   $valid ? DB::connection('b-connection')->commit() : DB::connection('b-connection')->rollback();
} catch (Exception $e) {
  $valid = false;
  DB::connection('b-connection')->rollback();
}

Как я отправляю задание

DeliveryOrderJob::dispatch($data)->onConnection('swift')->onQueue('do');

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

1 Ответ

0 голосов
/ 07 января 2020

Вам не нужно писать rollback функцию в try{}. Если этот лог c потерпит неудачу или возникнет какая-либо другая ошибка, то catch Exception rollback it.

\DB::connection('b-connection')->beginTransaction();
try {

\DB::connection('b-connection')->commit();
}catch (Exception $e) {
  $valid = false;
  DB::connection('b-connection')->rollback();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...