spring 引导的多个 Rabbitmq 队列

multiple Rabbitmq queues with spring boot

来自spring引导教程: https://spring.io/guides/gs/messaging-rabbitmq/

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

显然,我不能只创建同一个 bean 两次:

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

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

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

为 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());
}