首页 > 解决方案 > Spring Boot 定义多个交换

问题描述

我需要声明多个 Fanout 交换

@SpringBootApplication
public class Application {
  @Bean
  FanoutExchange exchange1() {
    return new FanoutExchange(exchangeName1, true, false);
  }

  @Bean
  FanoutExchange exchange2() {
    return new FanoutExchange(exchangeName2, true, false);
  }

  ....
  ....
}

一旦我添加代码,exchange2我就会收到错误:


应用程序无法启动


描述:

com.Application 中方法绑定的参数 1 需要单个 bean,但找到了 2 个: - exchange1:由 com.Application 中的方法 'exchange1' 定义 - exchange2:由 com.Application 中的方法 'exchange2' 定义

行动:

考虑将其中一个 bean 标记为 @Primary,更新消费者以接受多个 bean,或者使用 @Qualifier 来标识应该使用的 bean

标签: javaspringspring-bootrabbitmq

解决方案


例外是告诉您解决方案:

  1. bean 上的用户限定符
  2. 使用 @Primary 定义 2 个 bean 中的哪一个是主要的

您的代码应如下所示

@SpringBootApplication
public class Application {

    @Bean
    @Qualifier("exchange1")
    @Primary
    FanoutExchange exchange1() {
       return new FanoutExchange(exchangeName1, true, false);
    }

    @Bean
    @Qualifier("exchange2")
    FanoutExchange exchange2() {
       return new FanoutExchange(exchangeName2, true, false);
    }
 }

推荐阅读