RabbitMQ笔记(八)-RabbitAdmin

2019-08-31 12:26:27 浏览数 (1)

使用代码配置队列,交换器和绑定通常可以直接使用RabbitAdmin

默认情况下,当任何异常发生时,RabbitAdmin将立即停止处理所有声明;这可能会导致下游问题——例如,由于没有声明另一个队列(在错误队列之后定义的),侦听器容器无法初始化。

可以通过将RabbitAdmin上的ignore-declaration-exceptions属性设置为true来修改此行为。这个选项指示RabbitAdmin记录异常,并继续声明其他元素。当使用java配置RabbitAdmin时,这个属性是ignoredeclarationexception。这是一个全局设置,适用于所有元素、队列、交换器和绑定,具有一个类似的属性,仅适用于这些元素。

在1.6版本之前,此属性仅在通道上发生IOException时(例如当前属性与所需属性不匹配时)才生效。现在,该属性将对任何异常生效,包括TimeoutException等。

此外,任何声明异常都会导致DeclarationExceptionEvent的发布,该事件是一个ApplicationEvent,上下文中的任何ApplicationListener都可以使用该事件。事件包含对admin的引用、正在声明的元素和可抛出的元素。

配置bean
代码语言:javascript复制
 @Bean
    public RabbitAdmin rabbitAdmin(CachingConnectionFactory cachingConnectionFactory){
        RabbitAdmin rabbitAdmin = new RabbitAdmin(cachingConnectionFactory);
        rabbitAdmin.setIgnoreDeclarationExceptions(true);
        return rabbitAdmin;
}

使用

代码语言:javascript复制
//声明队列
rabbitAdmin.declareQueue(new Queue("aaa", true));
//声明交换器
rabbitAdmin.declareExchange(new TopicExchange("aaaa"));
//绑定队列和交换器
rabbitAdmin.declareBinding(new Binding("aaa", Binding.DestinationType.QUEUE,"aaa", "aaa", null));
也可以直接创建channel

这种方式涉及到channel不停的打开和关闭,可能需要进行一定的管理

代码语言:javascript复制
 Channel channel = connectionFactory.createConnection().createChannel(false);
 channel.queueDeclare("bbb", true, false, false , null);
 channel.exchangeDeclare("bbb", BuiltinExchangeType.TOPIC);
 channel.queueBind("bbb", "bbb", "bbb");

channel.close();

0 人点赞