RabbitMQの(4):RabbitMQのメッセージルーティング

メッセージルーティングの方法

  • ダイレクト:ダイレクトモード
  • トピック:転送モード
  • ファンアウト:ブロードキャストモード

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で再現

おすすめ

転載: blog.csdn.net/weixin_33802505/article/details/91138553