Spring RabbitMQ convertAndSend无报错但无法发送消息问题排查
问题解答
1. RabbitTemplate#convertAndSend 是否调用RabbitMQ管理API?
不是。Spring的RabbitTemplate基于AMQP原生协议直接与RabbitMQ服务器的AMQP端口(默认5672)建立连接发送消息,你用curl调用的是RabbitMQ的HTTP管理API(端口15672),二者是完全独立的通信方式,底层实现无关联。
2. 排查与修复方案
既然错误凭证会触发not_authorized,说明连接正常,可按以下步骤定位问题:
(1)确认Exchange与Queue的绑定关系
curl能成功发送,说明绑定本身有效,但要检查Spring代码中的绑定逻辑:
- 若手动创建绑定:确认代码中是否执行了
bindingBuilder.bind(queue).to(exchange).with(routingKey);,且参数与curl中的完全一致(比如routing key是否为my-routingkey、exchange是否为my-exchange)。 - 若依赖自动声明:检查配置是否开启自动创建,比如
spring.rabbitmq.template.exchange、spring.rabbitmq.template.routing-key是否正确,spring.rabbitmq.listener.simple.auto-startup是否设为true。
(2)开启mandatory模式排查路由问题
默认情况下,未匹配到任何队列的消息会被RabbitMQ静默丢弃。开启mandatory模式可让RabbitMQ在消息无法路由时返回错误:
rabbitTemplate.setMandatory(true); rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> { System.err.printf("消息未路由: exchange=%s, routingKey=%s, 错误码=%d, 错误信息=%s%n", exchange, routingKey, replyCode, replyText); });
开启后若消息无法路由,会触发回调打印具体错误,快速定位问题。
(3)检查消息序列化是否正常
你发送的是company对象,RabbitTemplate默认使用SimpleMessageConverter,若对象未实现Serializable接口,可能导致静默发送失败:
- 让
Company类实现Serializable接口:public class Company implements Serializable { // 类属性与方法 } - 或改用JSON序列化器,配置
Jackson2JsonMessageConverter:@Bean public MessageConverter jsonMessageConverter() { return new Jackson2JsonMessageConverter(); } @Bean public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); rabbitTemplate.setMessageConverter(jsonMessageConverter()); return rabbitTemplate; }
(4)验证RabbitTemplate的参数配置
- 若代码中手动指定
convertAndSend(exchange, routingkey, company),确认exchange和routingkey变量值与curl中的一致,无拼写错误。 - 若用默认配置,检查
application.properties/application.yml:spring.rabbitmq.template.exchange=my-exchange spring.rabbitmq.template.routing-key=my-routingkey
(5)查看RabbitMQ服务器日志
登录RabbitMQ服务器查看日志(默认路径:/var/log/rabbitmq/rabbit@<hostname>.log),日志会记录消息发送过程中的异常,比如权限不足(连接正常但无Exchange发送权限)、队列不存在等细节。
内容的提问来源于stack exchange,提问作者Jad Chahine
相关产品推荐
相关产品推荐

