RabbitMq消費確認及重試機制

rabbitmq的消費確認機制主要分為三個類型:
1.none
2.自動auto(默認)
3.手動manual
在配置文件中通過以下進行配置

spring.rabbitmq.listener.simple.acknowledge-mode=auto
spring.rabbitmq.listener.simple.acknowledge-mode= none
spring.rabbitmq.listener.simple.acknowledge-mode = manual

AUTO

rabbitmq默認的確認方式為auto,即自動確認,即消費者消費消費消息后會自動給broker發(fā)送確認信息蛾派,但在消費過程中發(fā)生異常的話豪椿,要分以下情況:
1.拋出AmqpRejectAndDontRequeueException異常時根时,消息會被拒絕示括,且不會回到消息隊列
2.拋出ImmediateAcknowledgeAmqpException異常會被消費確認。
3.拋出其他異常声邦,消息會重新回到隊列编丘,重新推送給消費者,一直到消費成功谱煤,否則會一直循環(huán)摊求,所以在消費自動確認模式下,需要配置消息重試機制刘离,合理處理發(fā)生異常重試的消息室叉。

Manual

手動確認的模式下,在消費端需要手動向broker發(fā)生消息確認寥闪,broker會根據(jù)返回的ack刪除該已消費的消息 太惠。但是如果發(fā)送異常且沒有手動處理并進行消息確認、拒絕疲憋、失敗的操作凿渊,即broker沒有收到任何的ack信息,消息隊列仍然會保留該消息缚柳,并在后續(xù)進行重新投遞埃脏,直到該消息被確認或拒絕。所以在開發(fā)中應該妥善處理異常情況秋忙,并搭配重試機制彩掐,死信隊列。手動模式下灰追,確認方式有以下3種:
1.basicAck
basicAck(long deliveryTag, boolean multiple)堵幽,表示成功確認,broker會刪除該消息弹澎,參數(shù)deliveryTag表示消息的唯一序號朴下,multiple表示是否一次消費多條消息,false表示只確認該序號對應的消息苦蒿,true表示確認所有比此序號小的消息殴胧。
2.basicNack
basicNack(long deliveryTag, boolean multiple, boolean requeue),表示失敗確認,一般在消費異常的時候用到团滥,參數(shù)requeue表示是否重新入隊列竿屹。false表示不會重新入隊列,直接丟棄灸姊。
3.basicReject
basicReject(long deliveryTag, boolean requeue)拱燃,表示拒絕該消息,requeue表示是否重回隊列厨钻,與basicNack的區(qū)別在于不能進行批量拒絕扼雏。
根據(jù)官網(wǎng)的描述:

image.png

在basicNack和basicReject中,requeue參數(shù)為false時分別有以下情況:
1.配置了死信隊列
false表示不重新入隊進行消費夯膀,配置了死信隊列诗充,則消息進入死信隊列
2.未配置死信隊列
false表示不重新入隊進行消費,沒有配置了死信隊列诱建,則消息直接刪除丟棄
根據(jù)上面的描述可知蝴蜓,上面的三個確認方法,basicNack和basicReject的requeue=false時俺猿,都會將消息隊列的消息刪除茎匠。

在手動模式下,如果連接中斷押袍、消費異常時诵冒,消息會自動重新入隊:

image.png

這種情況下,可能會出現(xiàn)消息冪等性的問題谊惭,即消費者接受到的消息可能是之前傳遞給其他消費者的消息汽馋,但有一個參數(shù)redeliver表示,為true表示是重新消費的圈盔。
在手動和自動模式下豹芯,如果都配置了重試機制,但消費者拋出異常時驱敲,兩種模式的消息重試不同

  • 自動模式下铁蹈,消費者拋出異常,消息重新入隊众眨,多次消費失敗了握牧,達到重試上限了,會自動丟棄娩梨。
  • 手動模式下我碟,消費者拋出一行,消息重試姚建,但如果消息一直沒有被確認或者拒絕,消息則會處于unacked狀態(tài)吱殉,導致消息積壓掸冤。
    消息進入死信隊列的前提是厘托,消息生產隊列需綁定死信隊列,且消息確認為失敗或拒絕時
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末稿湿,一起剝皮案震驚了整個濱河市铅匹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饺藤,老刑警劉巖包斑,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涕俗,居然都是意外死亡罗丰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門再姑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萌抵,“玉大人,你說我怎么就攤上這事元镀∩芴睿” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵栖疑,是天一觀的道長讨永。 經(jīng)常有香客問我,道長遇革,這世上最難降的妖魔是什么卿闹? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮澳淑,結果婚禮上比原,老公的妹妹穿的比我還像新娘。我一直安慰自己杠巡,他們只是感情好量窘,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著氢拥,像睡著了一般蚌铜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫩海,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天冬殃,我揣著相機與錄音,去河邊找鬼叁怪。 笑死审葬,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播涣觉,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼痴荐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了官册?” 一聲冷哼從身側響起生兆,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膝宁,沒想到半個月后鸦难,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡员淫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年合蔽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片满粗。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡辈末,死狀恐怖,靈堂內的尸體忽然破棺而出映皆,到底是詐尸還是另有隱情挤聘,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布捅彻,位于F島的核電站组去,受9級特大地震影響,放射性物質發(fā)生泄漏步淹。R本人自食惡果不足惜从隆,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缭裆。 院中可真熱鬧键闺,春花似錦、人聲如沸澈驼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缝其。三九已至挎塌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間内边,已是汗流浹背榴都。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漠其,地道東北人嘴高。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓竿音,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拴驮。 傳聞我的和親對象是個殘疾皇子谍失,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容