RabbitMQ 开启 mandatory 为 True 后 addReturnListener 监听器无法进入

2019-02-22 15:43:59 +08:00
 Vimax

这是 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();
    }

抓包:

图一
图二

1527 次点击
所在节点    Java
2 条回复
chuanzhangACE
2019-03-28 16:34:06 +08:00
不知道你解决了没,最近在开 rabbitmq,写测试时也出现了这种问题,我解决的方式时,保证在 retrun message 之前 channel 不关闭,在发送消息之前绑定监听器。
chuanzhangACE
2019-03-28 16:34:41 +08:00
@chuanzhangACE 看, 是

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/537671

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX