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