SpringBoot集成RabbitMQ并实现消息确认机制
- 互联网
- 2025-08-25 21:30:01

1. 引言
在 Spring Boot 项目中,RabbitMQ 是一种常见的消息中间件,用于实现异步通信。为了确保消息可靠传输,我们需要配置 RabbitTemplate,并实现 ConfirmCallback 和 ReturnsCallback 两种回调机制。
本文将介绍如何在 Spring Boot 中
2. RabbitMQ 配置类首先,我们创建 RabbitMqConfig 配置类:
集成 RabbitMQ,并详细讲解 RabbitTemplate 的使用。
@EnableRabbit @Configuration public class RabbitMqConfig { private static Logger log = LoggerFactory.getLogger(RabbitMqConfig.class); @Bean RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { RabbitTemplate rabbitTemplate = new RabbitTemplate(); rabbitTemplate.setConnectionFactory(connectionFactory); // 必须设置为 true,否则消息投递失败不会触发 ReturnCallback rabbitTemplate.setMandatory(true); // 消息发送确认回调 rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> { String messageId = correlationData != null ? correlationData.getId() : "null"; if (ack) { log.info("消息成功发送到交换机,消息ID:{}", messageId); } else { log.error("消息发送到交换机失败,消息ID:{},原因:{}", messageId, cause); } }); // 消息路由失败回调 rabbitTemplate.setReturnsCallback(returned -> { String correlationId = returned.getMessage().getMessageProperties() .getHeader("spring_returned_message_correlation"); log.error("消息发送失败,ID:{},应答码:{},原因:{},交换机:{},路由键:{}", correlationId, returned.getReplyCode(), returned.getReplyText(), returned.getExchange(), returned.getRoutingKey()); }); return rabbitTemplate; } } 3. 消息投递的四种情况在使用 RabbitMQ 时,消息投递可能遇到以下四种情况:
消息推送到 RabbitMQ 服务器,但找不到交换机
ConfirmCallback 被触发,ack = false
消息推送到服务器,找到交换机,但找不到队列
ConfirmCallback 被触发,ack = true
ReturnsCallback 也会被触发
消息推送到服务器,既找不到交换机,也找不到队列
ConfirmCallback 被触发,ack = false
消息推送成功
ConfirmCallback 被触发,ack = true
4. 发送消息示例 @Autowired private RabbitTemplate rabbitTemplate; public void sendMessage(String exchange, String routingKey, String message) { CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(exchange, routingKey, message, correlationData); log.info("发送消息:{},交换机:{},路由键:{},消息ID:{}", message, exchange, routingKey, correlationData.getId()); } 5. 总结
通过 RabbitTemplate 配置 ConfirmCallback 和 ReturnsCallback,我们可以确保消息的可靠投递,并在失败时进行日志记录或重试处理。本文的示例适用于 Spring Boot 2.x 及以上版本,实际使用时可结合具体业务需求进行优化。
希望这篇文章能帮助你更好地理解 RabbitMQ 在 Spring Boot 中的使用!
SpringBoot集成RabbitMQ并实现消息确认机制由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“SpringBoot集成RabbitMQ并实现消息确认机制”
下一篇
金融时间序列【量化理论】