RabbitMQ解決分布式事務思路:
案例: 經典案例,以目前流行點外賣的案例,用戶下單后,調用訂單服務,讓后訂單服務調用派單系統通知送外賣人員送單,這時候訂單系統與派單系統采用MQ異步通訊。
RabbitMQ解決分布式事務原理:采用最終一致性原理。
需要保證以下三要素
1、確認生產者一定要將數據投遞到MQ服務器中(采用MQ消息確認機制)
2、MQ消費者消息能夠正確消費消息,采用手動ACK模式(注意重試冪等性問題)
3、如何保證第一個事務先執行,采用補償機制,在創建一個補單消費者進行監聽,如果訂單沒有創建成功,進行補單。
如果生產者投遞消息到MQ服務器成功
場景1:如果消費者消費消息失敗了,生產者是不需要回滾事務的。
解決方案:消費者采用手動ack應答模式,采用MQ進行補償重試機制,注意MQ補償冪等性問題。
問題:如何確保生產者投遞消息到MQ服務器一定能成功?
解決方案:confirm機制(確認應答機制)。
場景2 如果生產者投遞消息到MQ服務器失敗,如何解決?
解決方案:使用生產者重試機制進行發消息,注意冪等性問題。
場景3 如何保證一個事務先執行,生產者投遞消息到MQ服務器成功,消費者消費成功了,但是訂單卻回滾了。
解決方案:補單機制。
傳統解決方式:
RabbitMq解決方案: