检查rabbitmq中是否存在具有指定名称的Exchange

时间:2014-08-08 10:57:20

标签: spring amqp spring-amqp spring-rabbit

我有一个场景,其中有一个应用程序正在生成不同类型的有趣事件(而不是命令)。生产者应用程序不关心事件的处理对象和方式。

我正在实施一个消费者,他会倾听一些已发布的事件并对其进行适当的处​​理。消费者应用程序想要检查发布者应用程序交换是否存在。那么,问题是如何通过使用弹簧提供的兔子/ AMQP库检查是否存在具有特定名称的交换?

我想,这可以通过尝试将队列绑定到不存在的交换来间接处理,从而导致异常。我正在寻找更好的方法来处理这种情况。

1 个答案:

答案 0 :(得分:9)

使用被动声明和RabbitTemplate;类似......

final String exchange = "foo";
boolean exists rabbitTemplate.execute(new ChannelCallback<DeclareOk>() {
        @Override
        public DeclareOk doInRabbit(Channel channel) throws Exception {
            try {
                return channel.exchangeDeclarePassive(exchange);
            }
            catch (Exception e) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Exchange '" + exchange + "' does not exist");
                }
                return null;
            }
        }
    }) != null;