2017-09-12 72 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不依賴於序列之間的權利協會?

問題是: 消息排序總是很貴。您要麼有嚴格的限制(例如,一個消費者),要麼您的可用性和速度較低。你最好的辦法是找到一種不依賴訂單的方法。

相關問題