Параметры для метода типа «Binding» в Spring AMQP RabbitMQ с SpringBoot - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь понять этот код, который является конфигурацией 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-компонентаExchangeFoo имеет имя параметра Queue как queueFoo, которое соответствует @Bean queueFoo.В противном случае, поскольку теперь существует 2 очереди, как он узнает, какую очередь связывать, основываясь только на типе возврата?

1 Ответ

0 голосов
/ 06 июня 2018

Я думаю, вам нужно начать с внедрения зависимостей Spring Framework: https://docs.spring.io/spring/docs/5.0.6.RELEASE/spring-framework-reference/core.html#beans-java-bean-annotation

Имя параметра этого метода @Bean не имеет значения.Тип очень важен, и бин с таким типом будет добавлен сюда, или вы потерпите неудачу, если их больше одного или у вас нет с @Primary.

Если вы определенно хотите внедрить компонент beerticular по имени, вам следует добавить к этому аргументу аннотацию @Qualifier: https://docs.spring.io/spring/docs/5.0.6.RELEASE/spring-framework-reference/core.html#beans-autowired-annotation-qualifiers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...