RabbitMQ高級特性

消息可靠性投遞

使用RabbitMQ的時候,作為消息發(fā)送方希望杜絕任何消息丟失或者投遞失敗場景,RabbitMQ為我們提供了兩種方式用來控制消息的投遞可靠性模式

RabbitMQ整個消息投遞的路徑為:
producer--->rabbitmq broker--->exchange--->queue--->consumer

確認(rèn)模式

設(shè)置ConnectionFactory的publisher-confirms="true" 開啟確認(rèn)模式
消息從producer到exchange則回返回一個confirmCallback

退回模式

設(shè)置ConnectionFactory的publisher-returns="true" 開啟退回模式

  • 如果消息沒有路由到Queue,則丟棄消息(默認(rèn))
  • 如果消息沒有路由到Queue,則會返回一個returnCallback,使用rabbitTemplate.setMandatory(true)參數(shù)開啟
  1. txSelect(),將當(dāng)前channel開啟事務(wù)
  2. txCommit(),用于提交事務(wù)
  3. txRollback(),用于回滾事務(wù)
事務(wù)機制

性能較差,不做講解
使用channel下列方法,完成事務(wù)控制:

Consumer ACK

ACK(acknowledge) 確認(rèn),表示消費端收到消息后的確認(rèn)方式
三種確認(rèn)方式:

  1. 自動確認(rèn):acknowledge="none" 當(dāng)消費者收到消息時會自動簽收,不管處理結(jié)果。
  2. 手動確認(rèn):acknowledge="manual" 消費端不會自動簽收,當(dāng)業(yè)務(wù)處理完成后,手動調(diào)用方法進行確認(rèn)。
  3. 根據(jù)異常情況確認(rèn):acknowledge="auto" 不常用
    自動確認(rèn)是指,當(dāng)消息一旦被consumer接收到,則自動確認(rèn)收到,并將相應(yīng)message從RabbitMQ的消息緩存中移除,但是實際業(yè)務(wù)處理中,很可能消息接收到,但是業(yè)務(wù)處理出現(xiàn)異常,那么消息就會丟失。如果設(shè)置了手動確認(rèn)的方式,則需要在業(yè)務(wù)處理成功后,調(diào)用channel.basicAck(),手動簽收,如果出現(xiàn)異常,則調(diào)用channel.basicNack()方法,讓其自動重新發(fā)送消息。

消費端限流

image.png

配置監(jiān)聽容器為手動確定并且 prefetch = N,N 代表手動確認(rèn)完N條消息后再拉去另外N條消息。

TTL

TTL全稱為Time To Live (存活時間/過期時間)。
當(dāng)消息到達(dá)存活時間后,還沒有被消費,會被自動清除。
RabbitMQ可以對消息設(shè)置過期時間,也可以對整個隊列設(shè)置過期時間。

設(shè)置整個隊列的過期時間
image.png
設(shè)置單條消息的過期時間
image.png

消息發(fā)送時傳入對象


image.png

如果設(shè)置消息的過期時間同時也設(shè)置了隊列的過期時間,以短的為準(zhǔn)。
隊列過期后,會將隊列所有的消息全部移除
消息過期后,只有在隊列頂端的才會判斷是否過期進行移除(否則要對整個隊列進行輪詢判斷每條消息是否過期,效率低)

死信隊列

image.png
image.png

image.png

image.png

image.png

延遲隊列

image.png

消息可靠性分析與追蹤

image.png

image.png

image.png

消息可靠性的保障

消息冪等性保障

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0. 前言 本文內(nèi)容分為如下三部分RabbitMQ高級特性 消息可靠性投遞Consumer ACK消費端限流TTL...
    abboo閱讀 1,664評論 1 8
  • 一. 可靠性保證 1.1 發(fā)送消息可靠性保證 rabbitmq 提供監(jiān)聽器來接受消息傳遞的狀態(tài),包括confirm...
    喬_幫_主閱讀 330評論 0 1
  • RabbitMQ 高級特性 消息可靠性 我們可以從以下幾方面來保證消息的可靠性: 客戶端代碼中的異常捕獲,包括生產(chǎn)...
    左師兄zuosx閱讀 751評論 0 0
  • 消息如何保障100%的投遞成功? 什么是生產(chǎn)端的可靠性投遞? 1、保障消息的成功發(fā)出 2、保障MQ節(jié)點的成功接收 ...
    小波同學(xué)閱讀 758評論 0 9
  • 1.消息如何保證100%投遞成功 在學(xué)習(xí)隊列的時候,我想很多朋友都在考慮這個問題。在講RabbitMq的消息可靠性...
    青衣敖王侯閱讀 691評論 0 3

友情鏈接更多精彩內(nèi)容