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