Spring AMQP RabbitMQ 中 "Binding" 类型方法的参数与 SpringBoot

Parameters to method of type "Binding" in Spring AMQP RabbitMQ with SpringBoot

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

我认为你需要从 Spring 框架依赖注入开始:https://docs.spring.io/spring/docs/5.0.6.RELEASE/spring-framework-reference/core.html#beans-java-bean-annotation

@Bean 方法的参数名称没有任何值。类型非常重要,将在此处注入具有这种类型的 bean,否则如果有多个 bean 或没有带 @Primary 的 bean,则会失败。

如果您确实想通过名称注入一个特定的 bean,您应该考虑向这样的参数添加一个 @Qualifier 注释:https://docs.spring.io/spring/docs/5.0.6.RELEASE/spring-framework-reference/core.html#beans-autowired-annotation-qualifiers