即使RabbitMQ消息代理已关闭,是否可以使用@RabbitListener加载spring上下文? 该行为应与代理断开连接时的行为类似。应用程序正在等待代理,当它恢复时,listerner会自动重新连接。
Spring Boot 1.3.2.RELEASE
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..
}
}
答案 0 :(得分:0)
您使用的是什么版本的Spring AMQP?
您能提供堆栈跟踪吗? (编辑问题,不要试着把它放在评论中)。
我刚刚进行了测试,它按预期工作;侦听器容器每5秒尝试重新连接一次(默认恢复间隔)。
rabbitAdmin.setIgnoreDeclarationExceptions(真); //无用
在1.6(目前在里程碑1)我们已经改变了布尔值以跳过所有异常;以前它只适用于由代理返回的错误引起的异常。
但是,在建立连接之前,管理员不会尝试声明元素,因此在此上下文中应该没有实际意义。
我需要查看堆栈跟踪以了解您的情况。