【发布时间】:2018-02-20 13:50:11
【问题描述】:
假设我们有两个应用程序A 和B 有各自不同的数据库A1 (MySQL) 和B1 (Postgres)。我们在应用程序A 中创建相互关联的实体X 和Y。 Y 属于 X。在每次插入数据库 A1(提交后)时,我们都会向 RabbitMQ 发布消息,以使应用程序 B 了解全新的实体。每个实体一个事件 - X1 和 Y1。一切都很好,如果 RabbitMQ 保持消息的顺序,那么应用程序 B 中的工作人员可以先处理 X1,然后再处理 Y1,以在数据库 B1 中新的 A 和 B 记录之间建立正确的关联.但据我了解,RabbitMQ 并不是为了保持消息顺序,而是在非常特定的情况下这样做,例如在一个通道内发布、发送到一个交换器、推送到一个队列、在一个通道内消费。
所以我的问题是关于正确的方向和一般方法:
- 我应该选择另一个保证消息顺序的消息队列吗?
- 我是否遗漏了 RabbitMQ 消息顺序细节中的特定内容?
- 我是否应该在应用程序
B端实现某种重试机制,以防消息顺序不符合预期时将消息重新排队返回到 RabbitMQ?
也许它会提供更合理的上下文 - B1 是一个数据仓库,它不仅聚合来自 A1 的数据,还聚合其他数据库。
【问题讨论】:
标签: database service architecture rabbitmq message-queue