我试图理解这个代码是RabbitMQ配置。
@Configuration
public class RabbitMqConfig {// rabbitmq配置类
public static final String EXCHANGE = "com.mldn.fish.exchange";// 配置交换空间
public static final String ROUTINGKEY = "com.mldn.fish.routingkey";// 创建一个路由
public static final String QUEUE_NAME = "com.mldn.fish.queue";// 创建队列名字
@Bean
public DirectExchange getDirectExchange() {
return new DirectExchange(RabbitMqConfig.EXCHANGE);// 得到交换空间
}
@Bean
public Queue getQueue() {
return new Queue(RabbitMqConfig.QUEUE_NAME);// 得到队列名字
}
@Bean
public Binding bindingExchangeQueue(DirectExchange exchange, Queue queue) {
return BindingBuilder.bind(queue).to(exchange).with(RabbitMqConfig.ROUTINGKEY);// 绑定交换空间和队列
}
}
这里,“bindingExchangeQueue”方法的参数是什么意思? 应该是 -
@Bean
public Binding bindingExchangeQueue(DirectExchange getDirectExchange, Queue getQueue) {
return BindingBuilder.bind(getQueue).to(getDirectExchange).with(RabbitMqConfig.ROUTINGKEY);// 绑定交换空间和队列
}
基本上我想知道这些参数的含义,名称是否与配置为@Beans的方法名称相匹配。有人可以解释一下吗?
我还找到了一个配置了多个队列的示例。 请在下面找到 -
@Bean
Queue queueFoo() {
return new Queue("queue.foo", false);
}
@Bean
Queue queueBar() {
return new Queue("queue.bar", false);
}
@Bean
TopicExchange exchange() {
return new TopicExchange("exchange");
}
@Bean
Binding bindingExchangeFoo(Queue queueFoo, TopicExchange exchange) {
return BindingBuilder.bind(queueFoo).to(exchange).with("queue.foo");
}
@Bean
Binding bindingExchangeBar(Queue queueBar, TopicExchange exchange) {
return BindingBuilder.bind(queueBar).to(exchange).with("queue.bar");
}
这里,bean bindingExchangeFoo的Queue参数名称为queueFoo,它与@Bean queueFoo匹配。否则,由于现在有2个队列,如何根据返回类型知道要绑定哪个队列?
答案 0 :(得分:1)
我认为你需要从Spring Framework依赖注入开始:https://docs.spring.io/spring/docs/5.0.6.RELEASE/spring-framework-reference/core.html#beans-java-bean-annotation
该@Bean
方法的参数名称不带任何值。类型非常重要,这种类型的bean将在这里注入,如果有多个,或者你没有@Primary
,那么你就会失败。
如果你肯定想按名称注入一个particular bean,你应该考虑在@Qualifier
注释中添加这样的参数:https://docs.spring.io/spring/docs/5.0.6.RELEASE/spring-framework-reference/core.html#beans-autowired-annotation-qualifiers