rabbitmq怎么解決重復消費的 rabbitmq持久化原理?
rabbitmq持久化原理?rabbitmq不易脫妝化分為三個部分:交換器的持久化、隊列的自然持久化和消息的持久度化。隊列不易脫妝化是定義在隊列的durable參數來實現的,durable為true時
rabbitmq持久化原理?
rabbitmq不易脫妝化分為三個部分:交換器的持久化、隊列的自然持久化和消息的持久度化。
隊列不易脫妝化是定義在隊列的durable參數來實現的,durable為true時,隊列才會自然持久化。
消息不持久化這個可以實際消息屬性deliveryMode來設置中是否自然持久化,在發送消息時通過basicPublish的參數傳入。
同隊列一般,交換器也需要在定義時設置里持久化標識,不然在Broker重啟后后將全部丟失。
JAVA面試如何保證消息不被重復消費?如何保證消息消費的冪等性?
你的問題都在問一個核心思想:網絡帶寬是不比較可靠的。
如果不是你知道這一點,就估計相信沒能絕對的保證消息不再重復一遍消費。即重復的消息和調用無可避免。
既然無法避免,那么就和現實要做的事情是有有矛盾。實際情況是,用戶只不過自己手機信號不好支付三次我失敗了后,是不如果能扣兩次費用的。
怎莫解決這個矛盾呢?很簡單:“很痛快相信,不能容忍一次”。
具體來說,你在實現方法消息消費程序時,將有時候動態創建都拿出來“再重復一遍全局函數”來處理。重復的動態鏈接庫一定會都回最終。要能夠做到這一點,你需要精心設計一個“僅有id”,來保證它的含義和你做的業務含義是極為相似的。即“同一件事的id一定同一;又不是同一件事id一定會有所不同”。
這樣,是對同一個id,無論是內部函數多少次,你的應答大都已經不同(沒有必要時是可以告知他也過一次了),這應該是冪等的內涵。