rabbitmq一般情況很少丟失,但是不能排除意外,為了保證系統高可用,我們必須作出更好完善措施,保證系統的穩定性。
1.訊息持久化
2.ack確認機制
3.設定集群映象模式
4.訊息補償機制
第一種:訊息持久化
rabbitmq 的訊息預設存放在記憶體上面,如果不特別宣告設定,訊息不會持久化儲存到硬碟上面的,如果節點重啟或者意外crash掉,訊息就會丟失。
所以就要對訊息進行持久化處理。如何持久化,下面具體說明下:
要想做到訊息持久化,必須滿足以下三個條件,缺一不可。
1) exchange 設定持久化
2)queue 設定持久化
3)message持久化傳送:傳送訊息設定傳送模式deliverymode=2,代表持久化訊息
第二種:ack確認機制
多個消費者同時收取訊息,比如訊息接收到一半的時候,乙個消費者死掉了(邏輯複雜時間太長,超時了或者消費被停機或者網路斷開鏈結),如何保證訊息不丟?
這個使用就要使用message acknowledgment 機制,就是消費端消費完成要通知服務端,服務端才把訊息從記憶體刪除。
這樣就解決了,及時乙個消費者出了問題,沒有同步訊息給服務端,還有其他的消費端去消費,保證了訊息不丟。
第三種:設定集群映象模式
我們先來介紹下rabbitmq三種部署模式:
1)單節點模式:最簡單的情況,非集群模式,節點掛了,訊息就不能用了。業務可能癱瘓,只能等待。
2)普通模式:預設的集群模式,某個節點掛了,該節點上的訊息不能用,有影響的業務癱瘓,只能等待節點恢復重啟可用(必須持久化訊息情況下)。
3)映象模式:把需要的佇列做成映象佇列,存在於多個節點,屬於rabbitmq的高可用方案
為什麼設定映象模式集群,因為佇列的內容僅僅存在某乙個節點上面,不會存在所有節點上面,所有節點僅僅存放訊息結構和元資料。
高可用三種策略模式:
1)同步至所有的節點
2)同步最多n個機器
3)只同步至符合指定名稱的節點
第四種:訊息補償機制
訊息補償機制需要建立在訊息要寫入資料庫日誌,傳送日誌,接受日誌,兩者的狀態必須記錄。
然後根據資料庫日誌記錄檢驗訊息傳送消費是否成功,不成功,進行訊息補償措施,重新傳送訊息處理。
RabbitMQ防止訊息丟失
rabbitmq中,訊息丟失可以簡單的分為兩種 客戶端丟失和服務端丟失。針對這兩種訊息丟失,rabbitmq都給出了相應的解決方案。回到目錄 如圖,生產者p向佇列中生產訊息,c1和c2消費佇列中的訊息,預設情況下,rabbitmq會平均的分發消費給c1c2 round robin dispatchi...
RabbitMQ如何防止訊息丟失及重複消費
一 rabbitmq出現訊息丟失的情況及其解決辦法 如圖所示,rabbitmq丟失訊息的情況可以傳送在任何乙個節點。a 丟失的原因 因為網路傳輸的不穩定性,當生產者在向mq傳送訊息的過程中,mq沒有成功接收到訊息,但是生產者卻以為mq成功接收到了訊息,不會再次重 送該訊息,從而導致訊息的丟失。b 解...
RabbitMQ如何防止資料丟失
解決方案 rabbitmq提供了transaction和cofirm模式來確保生產者不丟訊息.tansaction機制就是說 解決方案 處理訊息佇列丟失的情況,一般是開啟持久化磁碟的配置,將durable設定為true bean public exchange orderseckillexchang...