1. 程式人生 > 程式設計 >Spring RabbitMQ死信機制原理例項詳解

Spring RabbitMQ死信機制原理例項詳解

死信佇列:沒有被及時消費的訊息存放的佇列,訊息沒有被及時消費有以下幾點原因:

  • 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);
}

只要簡易的配置,這樣消費失敗的訊息就能被收集起來,後續我們可以實現一個死信消費者,將死信訊息進行補償。

如果是想手動補償,可以將死信訊息存入資料庫,做一個管理頁面去做補償.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。