小編給大家分享一下Spring RabbitMQ死信機(jī)制的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
我們提供的服務(wù)有:成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、新昌ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的新昌網(wǎng)站制作公司
死信隊(duì)列:沒(méi)有被及時(shí)消費(fèi)的消息存放的隊(duì)列,消息沒(méi)有被及時(shí)消費(fèi)有以下幾點(diǎn)原因:
1.有消息被拒絕(basic.reject/ basic.nack)并且requeue=false
2.隊(duì)列達(dá)到最大長(zhǎng)度
3.消息TTL過(guò)期
采用死信機(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() { Mapargs = 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)失敗的消息就能被收集起來(lái),后續(xù)我們可以實(shí)現(xiàn)一個(gè)死信消費(fèi)者,將死信消息進(jìn)行補(bǔ)償。
如果是想手動(dòng)補(bǔ)償,可以將死信消息存入數(shù)據(jù)庫(kù),做一個(gè)管理頁(yè)面去做補(bǔ)償.
看完了這篇文章,相信你對(duì)“Spring RabbitMQ死信機(jī)制的示例分析”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!