我想为使用 rabbitMq 的服务运行一些验收测试,但我想忽略所有需要服务间通信 (amqp) 的测试。
然而,问题在于 Spring 会在启动时尝试连接到(不存在的)rabbit 主机,以便它可以注册其消费者。它为每个用 @RabbitListener
注释的方法执行此操作,如果我的服务中有多个监听器,这可能会因为长时间超时而变得非常烦人。
我怎样才能减少这个超时,甚至一起阻止@RabbitListener 连接?
我们的(简化的)Rabbit 配置:
@Configuration
@EnableRabbit
public class RabbitMqConfig {
public RabbitMqConfig(
@Value("${rabbitmq.host}") String rabbitHost,
@Value("${rabbitmq.port}") int rabbitPort,
@Value("${exchange.name}") String exchange) {
this.rabbitHost = rabbitHost;
this.rabbitPort = rabbitPort;
this.exchange= exchange;
}
@Bean
DirectExchange directExchangeBean() {
return new DirectExchange(this.exchange, true, false);
}
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(rabbitHost);
connectionFactory.setPort(rabbitPort);
return connectionFactory;
}
@Bean
public RabbitTemplate rabbitTemplate() {
return new RabbitTemplate(connectionFactory());
}
@Bean
public Queue itemDoneQueue() {
return new Queue(ITEM_DONE_QUEUENAME, true);
}
@Bean
Binding itemDoneBinding() {
return BindingBuilder.bind(itemDoneQueue()).to(directExchangeBean()).with(ITEM_DONE_KEY);
}
}
属性
rabbitmq.host=192.168.42.100
rabbitmq.port=5672
exchange.name=myExchange
听众:
@RabbitListener(queues = ITEM_DONE_QUEUENAME)
public void receiveMessageFromItemDoneQueue(String message) {
// do the work
}
测试:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class})
public abstract class RabbitTest {
这里真的没什么特别的。显然在测试期间兔子主机不可用。没事儿。我想忽略这个事实。而且很快。
我试过了
spring.rabbitmq.connection-timeout=1
但这并没有改变任何东西。
使用
spring.rabbitmq.listener.simple.auto-startup=false
什么都不做。
使用
spring.autoconfigure.exclude:org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration
只是杀死了我的应用程序上下文加载,spring 提示 NoSuchBeanDefinitionException: No bean named 'rabbitListenerContainerFactory' available
有什么想法吗? 谢谢!
最佳答案
我遇到过类似的问题,但是用
解决了spring.rabbitmq.listener.direct.auto-startup=false
SpringBoot 版本 2.2.4.RELEASE
Spring框架版本5.2.3.RELEASE
关于java - 在集成测试期间防止 spring-rabbit 中的@RabbitListener 尝试连接到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44927085/