web-dev-qa-db-ja.com

SpringBootを使用した複数のRabbitmqキュー

春のブートチュートリアルから: https://spring.io/guides/gs/messaging-rabbitmq/

1つのキューと1つのキューのみを作成する例を示していますが、複数のキューを作成できるようにするにはどうすればよいですか?どのようにそれは可能でしょうか?

明らかに、同じBeanを2回だけ作成することはできません。

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

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

同じBeanを2回作成することはできません。あいまいになります。

11
winter

Bean定義ファクトリメソッドに異なる名前を付けます。通常、慣例により、キューと同じ名前を付けますが、必須ではありません...

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

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

メソッド名はBean名です。

[〜#〜]編集[〜#〜]

バインディングBeanでキューを使用する場合、次の2つのオプションがあります。

@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());
}
16
Gary Russell