假設我們有兩個應用程序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中的數據庫之間發佈數據更改?
所以我的問題是關於正確的方向和一般方法:
- 我應該選擇另一條消息隊列,可保證消息的順序?
- 我錯過了RabbitMQ消息訂單細節中的具體內容嗎?
- 我是否應該在應用程序
B
一側實現某種重試機制,如果消息順序不符合預期,這會將消息重新排入RabbitMQ?
也許它會給更明智的背景下 - B1
是數據倉庫,它聚合不僅來自A1
數據,還包括其他的數據庫。