【问题标题】:Multiple db transaction in one queue laravel 6.5.0一个队列中的多个数据库事务laravel 6.5.0
【发布时间】:2020-01-31 14:01:56
【问题描述】:

任何人都有在一个队列中使用具有多个数据库事务的 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');

基本上两者使用相同的逻辑,唯一不同的是数据库连接。请帮忙。

【问题讨论】:

  • 这是分布式事务的问题。
  • @TsaiKoga 你能详细说明一下吗
  • 对不起,我误会了,我以为你想在一个队列多级中做两个 diff 事务。但是,你做两个 diff 工作来做两个 diff 事务,我认为你的队列可以工作。跨度>
  • 你使用php artisan queue:work?如果你运行这个命令,你需要知道这个命令在你改变它之后不会再次加载你的代码。因此,如果您更改了b-connection 代码,则需要重新启动队列命令,它将起作用
  • 我为此使用horizon,我已经重新启动队列,但仍然是同样的问题,根本没有错误,database A 一切正常,但database B 根本没有提交,然后我重新启动我的队列然后它工作,但在我跑回来database A 然后database B 不再工作

标签: laravel


【解决方案1】:

您不需要在try{} 中编写rollback 函数。如果该逻辑将失败或发生任何其他错误,则 catch Exceptionrollback 它。

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

\DB::connection('b-connection')->commit();
}catch (Exception $e) {
  $valid = false;
  DB::connection('b-connection')->rollback();
}

【讨论】:

  • 即使我删除了try{} 中的rollback 函数,我的第二个工作仍然没有提交,我需要重新启动队列才能工作。
  • 您是否在$valid 变量中得到truefalse
  • catch (Exception $e) { echo $e->getMessage();
  • 我在 $valid 中得到它 true 但它没有提交
  • 我已经尝试$e->getMessage();,但完全没有错误
猜你喜欢
  • 2018-08-26
  • 2017-05-10
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多