RabbitMQ 不在启动应用程序时创建交换的任何原因?

Any reason why RabbitMQ doesn't create exchange on start application?

我有奇怪的 RabbitMQ 行为(当然对我而言)。

当我启动 spring 引导 Web 应用程序时,在我的配置中我正在尝试创建 rabbit 直接交换:

@Bean
    public DirectExchange exchange() {
        return new DirectExchange(directExchangeName);
    }

但是当应用程序启动时,我在RabbitMQ管理中找不到这个交换器。但这很有趣,因为在 ApplicationContext 中我可以看到这个 bean。

这个交换器在第一次调用后开始显示在 RabbitMQ 管理中。

我是不是漏了什么?还是我的配置有问题?

您需要 RabbitAdmin @Bean 来自动声明交换、队列、绑定。

而且,即便如此,在某些组件(侦听器容器、模板)打开连接之前,声明不会发生;管理员注册为连接侦听器。