为何分布式事务喜欢用消息队列实现, 直接rpc或者http不行吗?

发布于 2022-09-12 02:50:59 字数 529 浏览 27 评论 0

为何分布式事务喜欢用消息队列实现?直接rpc或者http不行吗?消息队列方式发起方不知道被动方处理结果,还要被动方通知,rpc/http方式实时知道处理结果,省去被动方通知
如果不是为了高并发削峰,直接rpc或者http是不是更好?

rpc/http分布式事务思想

  {
    transaction.start();
    doSomeWriteInDB();
    insert(OperationMessage, Status.PENDING);
    transaction.commit();
    try{
      boolean isSuccess = doRemoteRPCCall();
    } catch(Exception e) {
      return;
    }
    if(isSuccess)update(OperationMessage, Status.FINISHED);
  }

然后开定时任务查询PENDING的OperationMessage,重新执行doRemoteRPCCall();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

白昼 2022-09-19 02:50:59

解耦。

现在有 Service A / Service B,三者构成某分布式事务。

如果用 rpc,A / B 彼此是不是得知道对方(哪怕用注册中心不也有个调用过程)?用消息队列的话,彼此压根不需要知道对方,只需要跟消息队列打交道就可以了。

你硬要用 rpc 也行,那这时候又多俩 Service C / Service D 出来呢?你回过头还得去改 A / B 的代码吗?都你自己写的你说你费点儿劲,那也行;如果是两个不同 Team 在干活呢?人家凭啥加班帮你改,自己的任务不做了吗?

北风几吹夏 2022-09-19 02:50:59
  • mq的作用就是解耦、异步、削峰,实现分布式事务的最终一致性,是柔性事务。
  • 不考虑并发,直接rpc或http就需要考虑分布式事务如何保证,当然也有对应的分布式事务框架可以补。

两种实现没有优劣之分,针对不同场景使用不同的方式,只不过mq在高并发中比较常见。

我要还你自由 2022-09-19 02:50:59

不是通知的方式更适合这种场景吗?你那边好了通知我,我继续干我的。

箜明 2022-09-19 02:50:59

没有最好的技术,只有合适的技术。专业的中间件干专业的事情

芸娘子的小脾气 2022-09-19 02:50:59

消息队列的方案不能真正的达到一致性,是在一致性要求不高的场合下用的。而rpc方案(TCC方案)则可以达到严格的一致性,但代码量比较大。绝大部分场合不需要那么严格的一致性。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文