Spring Boot升级至2.7.5后消费RabbitMQ消息报AmqpRejectAndDontRequeueException错误
Spring Boot 2.7.5 RabbitMQ消费报错"No correlation header in reply"解决方案
问题分析
升级Spring Boot从2.4.3到2.7.5后,消费非请求响应队列时抛出No correlation header in reply异常,错误堆栈显示异常来自RabbitTemplate.onMessage方法。该方法仅用于处理请求响应模式的回复消息,要求消息必须携带correlationId头,说明当前消息被错误路由到了RabbitTemplate的回复处理逻辑中,核心原因是MessageListenerAdapter的配置或版本行为变化导致消息处理逻辑异常。
解决方案
1. 显式指定MessageListenerAdapter的监听方法
在创建MessageListenerAdapter时,明确指定调用自定义ChannelAwareMessageListener的onMessage方法,避免版本升级后默认行为的差异:
@Bean public MessageListenerAdapter listenerMessageQueueAdapter(ChannelAwareMessageListener messageBrokerReceiver) { MessageListenerAdapter adapter = new MessageListenerAdapter(messageBrokerReceiver); // 显式指定监听方法 adapter.setDefaultListenerMethod("onMessage"); return adapter; }
2. 绑定正确的消息转换器
确保MessageListenerAdapter使用你配置的Jackson2JsonMessageConverter,避免因消息解析错误触发异常:
@Bean public MessageListenerAdapter listenerMessageQueueAdapter(ChannelAwareMessageListener messageBrokerReceiver, Jackson2JsonMessageConverter jackson2JsonMessageConverter) { MessageListenerAdapter adapter = new MessageListenerAdapter(messageBrokerReceiver); adapter.setDefaultListenerMethod("onMessage"); adapter.setMessageConverter(jackson2JsonMessageConverter); return adapter; }
3. 排查自定义监听类实现
检查你的messageBrokerReceiver实现类,确认没有在onMessage方法中错误调用RabbitTemplate.onMessage方法,这会直接触发该异常。
4. 检查生产者消息
排查上游生产者发送的消息,确认是否有消息错误携带replyTo头但未包含correlationId头,若存在需修复生产者的发送逻辑。
内容的提问来源于stack exchange,提问作者Marcos Stefani Rosa
相关产品推荐
相关产品推荐

