使用SpringBoot

时间:2018-06-06 16:37:52

标签: spring-boot rabbitmq spring-amqp

我试图理解这个代码是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个队列,如何根据返回类型知道要绑定哪个队列?

1 个答案:

答案 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