检查rabbitmq中是不是存在指定名称的Exchange

Posted

技术标签:

【中文标题】检查rabbitmq中是不是存在指定名称的Exchange【英文标题】:Check if the Exchange with a specified name exist in rabbitmq检查rabbitmq中是否存在指定名称的Exchange 【发布时间】:2014-10-01 20:10:56 【问题描述】:

我有一个场景,其中有一个应用程序正在生成不同类型的有趣事件(不是命令)。生产者应用程序不关心事件由谁以及如何处理。

我正在实现一个消费者,他将监听一些已发布的事件并适当地处理它们。消费者应用程序想要检查发布者应用程序交换是否存在。那么,问题是如何利用spring提供的rabbit/AMQP库来检查是否存在特定名称的交换?

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

【问题讨论】:

【参考方案1】:

使用被动声明和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;

【讨论】:

以上是关于检查rabbitmq中是不是存在指定名称的Exchange的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMq学习 Exchange的四种类型和属性

如何检查名称空间中是不是存在类?

ADO.NET:使用 id 检查名称是不是已存在于数据库中

如何在插入 MySQL 之前检查表中是不是存在名称 [重复]

Firebase通过显示名称检查用户是不是存在[重复]

通过文件夹名称检查 Google Drive 中是不是存在文件夹(C#)