Spring Boot定义多个交换

时间:2018-10-15 12:23:16

标签: java spring spring-boot rabbitmq

我需要声明多个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

1 个答案:

答案 0 :(得分:1)

异常告诉您解决方案:

  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);
    }
 }