代码之家  ›  专栏  ›  技术社区  ›  megna

spring amqp rabbitmq与springboot中“binding”类型方法的参数

  •  0
  • megna  · 技术社区  · 7 年前

    我试图理解这段代码,这是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的队列参数名为queueFoo,它与@bean queueFoo匹配。否则,由于现在有两个队列,它如何知道仅基于返回类型绑定哪个队列?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Artem Bilan    7 年前

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

    它的参数名 @Bean 方法不会带来任何值。类型非常重要,具有这种类型的bean将被注入到这里,如果有多个bean失败,或者没有一个bean具有 @Primary .

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