Spring RabbitMQ死信機制原理例項詳解
阿新 • • 發佈:2020-03-04
死信佇列:沒有被及時消費的訊息存放的佇列,訊息沒有被及時消費有以下幾點原因:
- 1.有訊息被拒絕(basic.reject/ basic.nack)並且requeue=false
- 2.佇列達到最大長度
- 3.訊息TTL過期
採用死信機制的好處是可以提高系統的穩定性,當訊息消費失敗後,訊息進入死信佇列,可以對訊息進行補償,可以達到最終一致性的目標.
具體例子如下:
@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,args); }
只要簡易的配置,這樣消費失敗的訊息就能被收集起來,後續我們可以實現一個死信消費者,將死信訊息進行補償。
如果是想手動補償,可以將死信訊息存入資料庫,做一個管理頁面去做補償.
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。