即使rabbitmq已关闭,也会加载spring上下文

时间:2016-02-25 12:28:00

标签: java rabbitmq spring-amqp

即使RabbitMQ消息代理已关闭,是否可以使用@RabbitListener加载spring上下文? 该行为应与代理断开连接时的行为类似。应用程序正在等待代理,当它恢复时,listerner会自动重新连接。

Spring Boot 1.3.2.RELEASE

GitHub demo project

spring-amqp配置:

@Bean
public MessageConverter jsonMessageConverter() {
    return new JsonMessageConverter();
}

@Bean
public ConnectionFactory connectionFactory() {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host);
    connectionFactory.setUsername(username);
    connectionFactory.setPassword(password);
    return connectionFactory;
}

@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory());
    factory.setConcurrentConsumers(10);
    factory.setMaxConcurrentConsumers(10);
    factory.setMessageConverter(jsonMessageConverter());
    return factory;
}

@Bean
public AmqpAdmin amqpAdmin() {
    RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory());
    rabbitAdmin.setIgnoreDeclarationExceptions(true); // useless
    return rabbitAdmin;
}

监听器配置:

@Service
public class CalculatorServiceV2 {

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "calc_service_v2.multiply", durable = "false", autoDelete = "true"),
            exchange = @Exchange(value = "calc_service_v2", durable = "false", autoDelete = "true"),
            key = "multiply"))
    public Result multiply(Operands operands) {
        // do something..
    }
}

1 个答案:

答案 0 :(得分:0)

您使用的是什么版本的Spring AMQP?

您能提供堆栈跟踪吗? (编辑问题,不要试着把它放在评论中)。

我刚刚进行了测试,它按预期工作;侦听器容器每5秒尝试重新连接一次(默认恢复间隔)。

  

rabbitAdmin.setIgnoreDeclarationExceptions(真); //无用

在1.6(目前在里程碑1)我们已经改变了布尔值以跳过所有异常;以前它只适用于由代理返回的错误引起的异常。

但是,在建立连接之前,管理员不会尝试声明元素,因此在此上下文中应该没有实际意义。

我需要查看堆栈跟踪以了解您的情况。