2017-09-12 88 views
0

假设我们有两个应用程序AB与他们自己的不同数据库A1(MySQL)和B1(Postgres)相对应。我们在应用A中创建彼此关联的实体XYY属于X。在每次向数据库A1(提交后)插入时,我们发布消息给RabbitMQ以使应用B知道全新的实体。每个实体一个事件 - X1Y1。一切都很好,如果RabbitMQ保留消息的顺序,那么应用程序B中的工作人员可以首先处理X1,然后再处理Y1,以建立数据库B1中新AB记录之间的正确关联。但据我了解,RabbitMQ不是用来保持消息的顺序,而是在非常特殊的情况下执行消息,例如在一个通道内发布,发送到一个交换机,推到一个队列,在一个通道内消耗。如何在RabbitMQ中的数据库之间发布数据更改?

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

  1. 我应该选择另一条消息队列,可保证消息的顺序?
  2. 我错过了RabbitMQ消息订单细节中的具体内容吗?
  3. 我是否应该在应用程序B一侧实现某种重试机制,如果消息顺序不符合预期,这会将消息重新排入RabbitMQ?

也许它会给更明智的背景下 - B1是数据仓库,它聚合不仅来自A1数据,还包括其他的数据库。

回答

0

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

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

建立新的A和B的记录

不能X1,Y1表达一个明确的关系,允许创建的,B不依赖于序列之间的权利协会?

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

相关问题