【问题标题】:Any reason why RabbitMQ doesn't create exchange on start application?RabbitMQ 没有在启动应用程序时创建交换的任何原因?
【发布时间】:2020-04-18 09:18:28
【问题描述】:

我有奇怪的 RabbitMQ 行为(当然对我来说)。

当我启动 Spring Boot Web 应用程序时,在我的配置中我正在尝试创建兔子直接交换:

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

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

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

我错过了什么吗?还是我的配置有问题?

【问题讨论】:

  • 我也尝试使用 RabbitAdmin 配置所有主题和绑定。通过这种方式一切正常,我看到了所有的队列和交换器。但我不会使用 RabbitAdmin,我想更轻松地声明所有 bean。

标签: rabbitmq spring-rabbit rabbitmq-exchange


【解决方案1】:

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

即使那样,声明也不会发生,直到某个组件(侦听器容器、模板)打开连接;管理员注册为连接侦听器。

【讨论】:

  • 没有 RabbitAdmin 有什么办法吗?我试过在宠物项目中做同样的事情。在 Spring Boot Rabbit 文档中,所有没有 RabbitAdmin 创建的 bean 都可以正常工作。
  • Spring Boot 自动配置了一个RabbitAdmin bean;这就是它在那里工作的原因。您可以直接使用 AMQP API 手动完成(从连接工厂获取连接,然后从连接中获取通道,然后 queueDeclare() 然后关闭通道,连接。但是添加管理 bean 要容易得多.
  • 你确定吗?也许是我的错,但是当我启动应用程序时,我没有在 AppContext 中找到 RabbitAdmin bean。我用的是弹簧靴。
  • 我完全确定;我是 spring-amqp 的项目负责人。
猜你喜欢
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 2019-05-07
  • 2021-12-01
  • 1970-01-01
相关资源
最近更新 更多