欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Spring RabbitMQ死信机制原理实例详解

时间:2021-07-21 08:23:30|栏目:JAVA代码|点击:

死信队列:没有被及时消费的消息存放的队列,消息没有被及时消费有以下几点原因:

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

只要简易的配置,这样消费失败的消息就能被收集起来,后续我们可以实现一个死信消费者,将死信消息进行补偿。

如果是想手动补偿,可以将死信消息存入数据库,做一个管理页面去做补偿.

上一篇:Java HashSet(散列集),HashMap(散列映射)的简单介绍

栏    目:JAVA代码

下一篇:JavaWeb入门:ServletContext详解和应用

本文标题:Spring RabbitMQ死信机制原理实例详解

本文地址:http://www.codeinn.net/misctech/159998.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有