メッセージルーティングの方法
- ダイレクト:ダイレクトモード
- トピック:転送モード
- ファンアウト:ブロードキャストモード
1.トピックモード
ここでは、ワイルドカードモードを使用することができますbingKeyを表す:「*」を一致ワードを示し、「#」には、一致または複数の単語を示していません。これにより、メッセージキューは、複数の経路を受信するように実装されてもよいです。
- キューを作成します:キュー名は、キューのルーティングキーのために使用されていることに注意してください
@Bean(name = "topic_queue1")
public Queue topic_queue_1() {
return new Queue("topic.queue.1");
}
@Bean(name = "topic_queue2")
public Queue topic_queue_2() {
return new Queue("topic.queue.2");
}
- 作成TopicExchange
@Bean
public TopicExchange exchange() {
return new TopicExchange("topic_exchange");
}
- バインディングを作成します。
@Bean
public Binding bindingExchangeMessage1(@Qualifier("topic_queue1") Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("topic.queue.1");
}
@Bean
public Binding bindingExchangeMessage2(@Qualifier("topic_queue2") Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("topic.queue.*");
}
あなたはその後、キューは唯一のキーをルーティングの創造の初めに設定されたデータにアップロードを受信しません、追加のルーティングキーを指定することが可能なルーティングを、キューに設定した場合、あなたはまた、メッセージをアップロードするには、新しいキーバインドを受け取ることができます。
- メッセージの送信
メッセージを送信するときに交換を指定するとroutingKeyを
template.convertAndSend("topic_exchange", "topic.queue.test", message + "_topic_exchange_test");
- モニター・キュー:メッセージを受信
@RabbitListener(queues = "topic.queue.1")
public void process2(String message) {
logger.info("topic.queue.1_" + message);
}
@RabbitListener(queues = "topic.queue.2")
public void process3(String message) {
logger.info("topic.queue.2_" + message);
}
2.ファンアウトモード
ブロードキャストモードでは、キーのルーティング問題ではありません。FanoutExchangeは良い交流が密接に結びついキューリストにメッセージを渡します。
- キューを作成します。
@Bean(name = "fanout_queue")
public Queue fanout_queue() {
return new Queue("fanout.queue.1");
}
@Bean(name = "fanout_queue2")
public Queue fanout_queue_2() {
return new Queue("fanout.queue.2");
}
@Bean(name = "fanout_queue3")
public Queue fanout_queue_3() {
return new Queue("fanout.queue.3");
}
- FanoutExchangeを作成します
@Bean
public FanoutExchange fanoutExchange() {
return new FanoutExchange("fanout_exchange");
}
- バインディングの作成:ブロードキャストキューアップファンアウト交換にバインドする必要が
@Bean
public Binding fanoutBindingExchangeMessage1(@Qualifier("fanout_queue") Queue queue, FanoutExchange exchange) {
return BindingBuilder.bind(queue).to(exchange);
}
@Bean
public Binding fanoutBindingExchangeMessage2(@Qualifier("fanout_queue2") Queue queue, FanoutExchange exchange) {
return BindingBuilder.bind(queue).to(exchange);
}
@Bean
public Binding fanoutBindingExchangeMessage3(@Qualifier("fanout_queue3") Queue queue, FanoutExchange exchange) {
return BindingBuilder.bind(queue).to(exchange);
}
- メッセージを送ります
template.convertAndSend("fanout_exchange", "", message + "_fanout_exchange");
ます。https://www.jianshu.com/p/ab63a6f969e5で再現