由配置Rabbitmq多virtual_host失效认识@Qualifier

背景:
项目框架为springboot2.2.x,在使用rabbitmq时配置了多个virtual_host,但在实际使用的过程中向某一个virtual_host下的队列发送消息时竟然发送到别的virtual_host下的队列(队列名字都是一样的)去了,仔细检查了配置也没有什么问题…
解决:
Rabbitmq的配置文件是用@Configuration写的,注入了多个@Bean(xxxRabbitTemplate),发现在@Autowired某个rabbitTemplate时未指定某个具体的类,问题就出现在这,@Autowired默认是按type注入的,当某个接口有多个实现类时,结合@Primary是指注入这一个实现类的,这就造成明明配置了那么多个xxxRabbitmqTemplate其实只有那个先注入ioc容器中的实现类生效了。那之后无论向哪个virtual_host下的队列发送都只会发送到某个ioc容器中存在的那个实现类配置的virtual_host中的队列去。
找到问题在哪就很好解决咯,在@Autowired的时候指定是哪个具体实现类就可以了,即@Autowired搭配@Qualifier(xxxRabbitmqTemplate)注入即可,对了如果像我那样用@Bean(xxx)的方式,@Qualifier(xxx)要个@Bean保持一致;@Bean没有指定类名的话,@Qualifier(@Bean注解下方法名的名称,首字母要小写)
之后就可以向virtual_host对应的队列中发送消息了。还是对spring理解的不够深啊,再加把劲!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值