@Bean
public ConnectionFactory connectionFactory1() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setHost("xxxx");
cachingConnectionFactory.setUsername("xxxx");
cachingConnectionFactory.setPassword("xxxx");
cachingConnectionFactory.setPort(111);
return cachingConnectionFactory;
}
@Bean
public ConnectionFactory connectionFactory2() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setHost("ttt");
cachingConnectionFactory.setUsername("ttt");
cachingConnectionFactory.setPassword("ttt");
cachingConnectionFactory.setPort(111);
return cachingConnectionFactory;
}
@Bean
public SimpleRabbitListenerContainerFactory bookingContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory1) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setPrefetchCount(5);
factory.setConcurrentConsumers(5);
configurer.configure(factory, connectionFactory1);
return factory;
}
- ConnectionFactory connectionFactory1 。
先按照类型ConnectionFactory查找,发现有2个相同类型的ConnectionFactory., connectionFactory1 和connectionFactory2。 - 接着就按照参数名字查找这里指定的参数名字是connectionFactory1,就使用connectionFactory1这个bean.
- 若是使用的是:ConnectionFactory connectionFactory2,就使用的connectionFactory2这个bean.
- 如果参数名字是其他的不存在的bean,此时只能按照之前的类型来找,由于有2个相同类型的实例,所以会报错
简单总结:
/**
* 声明队列交换机等
* @param connectionFactory
* @return
*/
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
System.out.println(String.format("-----------getRabbitAdmin:%s", connectionFactory.hashCode()));
return new RabbitAdmin(connectionFactory);
}
如上,有参数connectFactory
,若spring容器
中只有一个ConnectionFactory 类型
的bean
,则不论参数取名为何都是按类型取bean ConnectionFactory 为参数
,若有多个则参数取名必须为多个bean中的一个
,否则报错
参考:
https://blog.csdn.net/a718515028/article/details/89406589