java - 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
解决方案
例外是告诉您解决方案:
- bean 上的用户限定符
- 使用 @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);
}
}
推荐阅读
- node.js - 在 Heroku 上启动浏览器进程失败
- javascript - 如何完美地验证电子邮件地址?
- c - 如果按位或运算符在两个数字之间使用两次。这将如何运作?
- linux - 有什么方法可以在我的云虚拟机中设置一个 .bin 文件,以便在每次崩溃时重新启动我的服务器?
- cytoscape - 旧版 Cytoscape 属性格式未导入
- excel - 即使我关闭了显示警报,workbook.close 也会提示“想要保存”对话框
- python - 第一次猜测,即使我做对了,也没有任何东西被注册
- python - Python FuzzyWuzzy 比率:它是如何工作的?
- php - 如何在具有相同 ID 的列中选择不同的值然后删除它们 PHP SQL Server
- javascript - 如何将参数从纯javascript文件发送到html文件