【问题标题】:How to publish data changes between databases within RabbitMQ?如何在 RabbitMQ 中发布数据库之间的数据更改?
【发布时间】:2018-02-20 13:50:11
【问题描述】:

假设我们有两个应用程序AB 有各自不同的数据库A1 (MySQL) 和B1 (Postgres)。我们在应用程序A 中创建相互关联的实体XYY 属于 X。在每次插入数据库 A1(提交后)时,我们都会向 RabbitMQ 发布消息,以使应用程序 B 了解全新的实体。每个实体一个事件 - X1Y1。一切都很好,如果 RabbitMQ 保持消息的顺序,那么应用程序 B 中的工作人员可以先处理 X1,然后再处理 Y1,以在数据库 B1 中新的 AB 记录之间建立正确的关联.但据我了解,RabbitMQ 并不是为了保持消息顺序,而是在非常特定的情况下这样做,例如在一个通道内发布、发送到一个交换器、推送到一个队列、在一个通道内消费。

所以我的问题是关于正确的方向和一般方法:

  1. 我应该选择另一个保证消息顺序的消息队列吗?
  2. 我是否遗漏了 RabbitMQ 消息顺序细节中的特定内容?
  3. 我是否应该在应用程序B 端实现某种重试机制,以防消息顺序不符合预期时将消息重新排队返回到 RabbitMQ?

也许它会提供更合理的上下文 - B1 是一个数据仓库,它不仅聚合来自 A1 的数据,还聚合其他数据库。

【问题讨论】:

    标签: database service architecture rabbitmq message-queue


    【解决方案1】:

    一切都很好,如果 RabbitMQ 保持消息的顺序

    这是唯一的解决方案吗? X 和 Y 实例不能获得分配的序列号,然后将用于在 B 中重建正确的序列吗?

    在新的 A 和 B 记录之间建立正确的关联

    X1、Y1 不能表达一个明确的关系,允许在不依赖序列的情况下创建 A、B?

    重点是: 消息排序总是很昂贵。您要么有严格的限制(例如,一个消费者),要么您的可用性和速度较低。你最好的选择是找到一种不依赖顺序的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      相关资源
      最近更新 更多