RabbitMQ basicPublish无法向队列插入消息问题求助
兄弟,太懂这种明明逻辑对却跑不通,大概率是某个低级错误没注意到的憋屈感!咱们先把你的RabbitMQ发送代码补全,再挨个排查最容易踩的坑:
完整的消息发送代码示例
先把你没写完的代码补成可运行的版本,重点注意exchange和队列的绑定环节:
private static void send_equity_task_to_rabbitmq(ConnectionFactory factory) throws IOException, TimeoutException { // 建立连接和通道 Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 替换成你预定义的exchange、routing key和队列名 String predefinedExchange = "your-exchange-name"; String predefinedRoutingKey = "your-routing-key"; String queueName = "b"; // 1. 声明队列(如果队列未提前在RabbitMQ后台创建) channel.queueDeclare(queueName, false, false, false, null); // 2. 【关键步骤】绑定队列到预定义的exchange和routing key // 这一步90%的新手都会忘!不绑定的话消息会直接被丢弃 channel.queueBind(queueName, predefinedExchange, predefinedRoutingKey); // 3. 声明exchange(要和后台预定义的类型一致:direct/fanout/topic等) channel.exchangeDeclare(predefinedExchange, "direct", false); // 4. 发送"hello"消息 String message = "hello"; channel.basicPublish(predefinedExchange, predefinedRoutingKey, null, message.getBytes("UTF-8")); // 记得关闭资源 channel.close(); connection.close(); }
最容易忽略的低级错误排查清单
- 忘记绑定队列与exchange:这是头号坑!如果你的exchange是预定义的,必须通过
queueBind把队列和对应的routing key关联起来,否则RabbitMQ会直接丢弃无法路由的消息。 - exchange类型不匹配:比如后台预定义的是
fanout类型,但你代码里声明成了direct,会导致消息路由失败,一定要确保类型完全一致。 - routing key拼写错误:RabbitMQ的routing key是大小写敏感的,比如预定义的是
equity.task,你写成Equity.Task就会匹配失败。 - 队列声明参数冲突:如果队列已经在RabbitMQ后台存在,你代码里
queueDeclare的参数(比如是否持久化、是否排他)要和已存在的队列完全一致,否则会抛出异常。 - 未指定消息编码:直接用
getBytes()可能会出现编码问题,建议指定UTF-8避免乱码。
内容的提问来源于stack exchange,提问作者manuel mourato
相关产品推荐
相关产品推荐

