我有一个spring启动应用程序,我的目标是在应用程序启动时声明队列、交换和绑定。应用程序将向各个队列生成消息应用程序上将没有使用者。
我已经把这些依赖性包括在我的 pom.xml
```
org.springframework.boot
spring-boot-starter-web
2.3.5.RELEASE
org.springframework.amqp
spring-rabbit
2.2.12.RELEASE
我的配置类
@Configuration
public class RabbitConfiguration {
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("myhost", 5672);
connectionFactory.setUsername("example_name");
connectionFactory.setPassword("example_pass");
return connectionFactory;
}
@Bean
public AmqpAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
@Bean
public Queue declareQueue() {
return new Queue("test_queue", true, false, false);
}
@Bean
public DirectExchange declareDirectExchange() {
return new DirectExchange("test_direct_exchange", true, false);
}
@Bean
public Declarables declareBindings() {
return new Declarables(
new Binding("test_queue", DestinationType.QUEUE, "test_direct_exchange", "test_routing_key", null)
);
}
}
我的问题是,队列、交换和绑定不是在应用程序启动时创建的。Spring Boot甚至无法打开连接。只有当我向队列生成消息时,才会创建连接、队列等。
2条答案
按热度按时间4si2a6ki1#
经过一番挖掘,我发现我错过了执行器的依赖性。所以添加这个依赖关系解决了我的问题
奇怪的是,除非存在执行器依赖项,否则在应用程序启动时不会打开连接。
wnrlj8wa2#
如果您想在应用程序启动期间强制声明并且没有任何使用者,您可以将启动器添加到类路径,或者自己创建共享连接。
这不会关闭连接;如果你想这么做,打电话给我
cf.resetConnection()
.如果你想在代理关闭时启动应用程序,可以这样做。