多个带弹簧启动的Rabbitmq队列

时间:2016-12-18 16:54:55

标签: spring-boot rabbitmq spring-amqp rabbitmq-exchange spring-rabbitmq

从春季启动教程: https://spring.io/guides/gs/messaging-rabbitmq/

他们给出了仅创建1个队列和1个队列的示例,但是,如果我希望能够创建多于1个队列,该怎么办?怎么可能?

显然,我不能只创建两次相同的bean:

proxy

你不能两次创建同一个bean,它会造成歧义。

1 个答案:

答案 0 :(得分:15)

给bean定义工厂方法不同的名称。通常,按照惯例,您可以将它们命名为与队列相同,但这不是必需的......

@Bean
Queue queue1() {
    return new Queue(queueNameAAA, false);
}

@Bean
Queue queue2() {
    return new Queue(queueNameBBB, false); 
}

方法名称是bean名称。

修改

在绑定bean中使用队列时,有两个选项:

@Bean
Binding binding1(@Qualifier("queue1") Queue queue, TopicExchange exchange) {
    return BindingBuilder.bind(queue).to(exchange).with(queueNameAAA);
}

@Bean
Binding binding2(@Qualifier("queue2") Queue queue, TopicExchange exchange) {
    return BindingBuilder.bind(queue).to(exchange).with(queueNameBBB);
}

@Bean
Binding binding1(TopicExchange exchange) {
    return BindingBuilder.bind(queue1()).to(exchange).with(queueNameAAA);
}

@Bean
Binding binding2(TopicExchange exchange) {
    return BindingBuilder.bind(queue2()).to(exchange).with(queueNameBBB);
}

甚至更好......

@Bean
Binding binding1(TopicExchange exchange) {
    return BindingBuilder.bind(queue1()).to(exchange).with(queue1().getName());
}

@Bean
Binding binding2(TopicExchange exchange) {
    return BindingBuilder.bind(queue2()).to(exchange).with(queue2().getName());
}