RabbitMQ-02-配置項說明

ACK確認模式

AcknowledgeMode.NONE :不確認
1. 默認全部消息消費成功,會不斷的向消費者推送消息
2. 由於rabbitMq認爲全部消息都被消費成功,因此隊列中不在存有消息,消息存在丟失的危險

AcknowledgeMode.AUTO:自動確認
1. 由spring-rabbit依據消息處理邏輯是否拋出異常自動發送ack(無異常)或nack(異常)到server端。 
存在丟失消息的可能,若是消費端消費邏輯拋出異常,也就是消費端沒有處理成功這條消息,那麼就至關於丟失了消息
若是消息已經被處理,但後續代碼拋出異常,使用 Spring 進行管理的話消費端業務邏輯會進行回滾,
這也一樣形成了實際意義的消息丟失
2. 使用自動確認模式時,須要考慮的另外一件事是消費者過載

AcknowledgeMode.MANUAL:手動確認
1. 手動確認則當消費者調用 ack、nack、reject 幾種方法進行確認,手動確承認以在業務失敗後進行一些操做,
若是消息未被 ACK 則會發送到下一個消費者
2. 手動確認模式可使用 prefetch,限制通道上未完成的(「正在進行中的」)發送的數量


mandatory: (spring.rabbitmq.template.mandatory)
1. 當其值爲true時,交換器沒法根據自身的類型和路由鍵匹配到符合條件的隊列,這時rabbitMQ就會經過回調函數將消息返回給生產者。
2. 當其值爲false時,若是出現上述情形,則消息會丟失


Auto
1. 若是消息成功被消費(成功的意思是在消費的過程當中沒有拋出異常),則自動確認
2. 當拋出 AmqpRejectAndDontRequeueException 異常的時候,則消息會被拒絕,且 requeue = false(不從新入隊列)
3. 當拋出 ImmediateAcknowledgeAmqpException 異常,則消費者會被確認
4. 其餘的異常,則消息會被拒絕,且 requeue = true,此時會發生死循環,
能夠經過 setDefaultRequeueRejected(默認是true)去設置拋棄消息
相關文章
相關標籤/搜索