Spring RabbitMQ死信機(jī)制原理實(shí)例詳解
死信隊(duì)列:沒有被及時(shí)消費(fèi)的消息存放的隊(duì)列,消息沒有被及時(shí)消費(fèi)有以下幾點(diǎn)原因:
- 1.有消息被拒絕(basic.reject/ basic.nack)并且requeue=false
- 2.隊(duì)列達(dá)到最大長(zhǎng)度
- 3.消息TTL過期
采用死信機(jī)制的好處是可以提高系統(tǒng)的穩(wěn)定性,當(dāng)消息消費(fèi)失敗后,消息進(jìn)入死信隊(duì)列,可以對(duì)消息進(jìn)行補(bǔ)償,可以達(dá)到最終一致性的目標(biāo).
具體例子如下:
@Bean
public Queue deadQueue() {
return new Queue(DEAD_QUEUE_NAME, true);
}
@Bean
public DirectExchange deadExchange() {
return new DirectExchange(DEAD_EXCHANGE_NAME);
}
@Bean
public Binding bindingDeadExchange(Queue deadQueue, DirectExchange deadExchange) {
return BindingBuilder.bind(deadQueue).to(deadExchange).with(DEAD_ROUTING_KEY);
}
@Bean
Queue directQueue() {
Map<String, Object> args = new HashMap<>(2);
args.put("x-dead-letter-exchange", DEAD_EXCHANGE_NAME);
args.put("x-dead-letter-routing-key", DEAD_ROUTING_KEY);
return new Queue(DIRECT_QUEUE_NAME, true, false, false, args);
}
只要簡(jiǎn)易的配置,這樣消費(fèi)失敗的消息就能被收集起來,后續(xù)我們可以實(shí)現(xiàn)一個(gè)死信消費(fèi)者,將死信消息進(jìn)行補(bǔ)償。
如果是想手動(dòng)補(bǔ)償,可以將死信消息存入數(shù)據(jù)庫,做一個(gè)管理頁面去做補(bǔ)償.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解
這篇文章主要給大家介紹了關(guān)于Mybatis中輸入輸出映射與動(dòng)態(tài)Sql的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
java實(shí)現(xiàn)簡(jiǎn)單計(jì)算器
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
SSM框架中測(cè)試單元的使用 spring整合Junit過程詳解
這篇文章主要介紹了SSM框架中測(cè)試單元的使用 spring整合Junit過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Java Web實(shí)現(xiàn)文件上傳和下載接口功能詳解
這篇文章主要為大家詳細(xì)介紹了Java Web實(shí)現(xiàn)文件上傳和下載接口功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的借鑒價(jià)值,需要的可以參考一下2022-12-12
解決spring 處理request.getInputStream()輸入流只能讀取一次問題
這篇文章主要介紹了解決spring 處理request.getInputStream()輸入流只能讀取一次問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09

