这是 RabbitMQ 实战指南里面的一个 mandatory 参数介绍,详见 pg56,我开启 mandatory 参数为 true 后无法进入返回确认监听器。参考了搜索引擎的其他 demo,发现依旧无效。
没有将交换器和队列绑定,没有设置路由 key,生产者应该没有被正确路由到合适的队列。为什么会无法进入监听器的?
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.0.1</version>
</dependency>
public static void main(String[] args) throws IOException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("x.x.x.x");
factory.setPort(5672);
factory.setUsername("root");
factory.setPassword("root");
// 创建连接
Connection connection = factory.newConnection();
// 创建信道
Channel channel = connection.createChannel();
// 发送一条持久化的消息
String message = "Hello world6666";
channel.basicPublish("normalExchange", "", true, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
System.out.println("----------------");
channel.addReturnListener(new ReturnListener() {
// 无法进入确认监听器
@Override
public void handleReturn(int i, String s, String s1, String s2, AMQP.BasicProperties basicProperties, byte[] bytes) throws IOException {
String string = new String(bytes);
System.out.println(string);
}
});
// 关闭资源
channel.close();
connection.close();
}
图一
图二
1
chuanzhangACE 2019-03-28 16:34:06 +08:00
不知道你解决了没,最近在开 rabbitmq,写测试时也出现了这种问题,我解决的方式时,保证在 retrun message 之前 channel 不关闭,在发送消息之前绑定监听器。
|
2
chuanzhangACE 2019-03-28 16:34:41 +08:00
@chuanzhangACE 看, 是
|