SpringBoot 2.0シリーズ--09--メッセージキュー(Rabbit)


SpringBoot 2.0シリーズ–09–メッセージキュー(Rabbit)
文書ディレクトリ
  • SpringBoot 2.0シリーズ--09-メッセージキュー(Rabbit)
  • 前言
  • 紹介
  • 総フロー
  • 具体的な操作
  • rabbitをインストールし、
  • を起動します.
  • 構成参照
  • pomファイル
  • アプリケーション.propertiesファイル
  • 単純(一対一のメッセージ)インスタンス
  • キュー構成
  • を作成
  • 作成者
  • 消費者
  • の作成
  • 試験類及び結果
  • 一対のマルチメッセージ
  • キュー構成
  • を作成
  • 作成者
  • 消費者
  • の作成
  • 試験類、説明及び結果
  • マルチペアマルチメッセージ
  • キュー構成
  • を作成
  • 作成者
  • 消費者
  • の作成
  • 試験類、説明及び結果
  • 送信対象
  • キュー構成
  • を作成
  • オブジェクト
  • 作成者
  • 消費者
  • の作成
  • 試験類、説明及び結果
  • Topic Exchange
  • キュー構成
  • を作成
  • 作成者
  • 消費者
  • の作成
  • 試験類及び結果
  • Fanout Exchange
  • キュー構成
  • を作成
  • 作成者
  • 消費者
  • の作成
  • 試験類及び結果
  • 参照リンク
  • 連絡先
  • 前言
    JDKは11を出して、SpringBootは2.0を出して、まだ系統的な学習があったことがなくて、ちょうど最近プロジェクトの中で使うことがあって、いくつか肝心なものを列挙して、SpringBoot 2.0シリーズ–00–ディレクトリを忘れないようにします
    紹介する
    プロジェクトを分割する必要があり、分散する必要がある場合は一般的にメッセージキューを使用する必要があります.Rabbitはメッセージミドルウェアとして、実際のプロジェクトで使用される割合は大きいです.
    メッセージミドルウェアの最も主要な役割はデカップリングであり、ミドルウェアの最も標準的な使い方は生産者がメッセージをキューに送信することであり、消費者はキューからメッセージを取り出して処理し、生産者は誰が消費するのかに関心を持たず、消費者は誰がメッセージを生産しているのかに関心を持たず、デカップリングの目的を達成する.
    こちらは主にspringbootとRabbitMQを組み合わせて使用しています.詳しくはこちらをご覧ください.
    //todo某リンク
    総プロセス
  • rabbitをインストールし、
  • を起動します.
  • 構成参照
  • 単純(一対一のメッセージ)インスタンス
  • 一対のマルチメッセージ
  • マルチペアマルチメッセージ
  • 送信対象
  • Topic Exchange
  • Fanout Exchange

  • 具体的な操作
    rabbitのインストール、起動
    表示可能
    //todo某リンク
    リファレンスの設定
    pomファイル
    
    
        org.springframework.boot
        spring-boot-starter-amqp
    
    

    アプリケーション.propertiesファイル
    #          
    spring.rabbitmq.host=localhost
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    

    単純(一対一のメッセージ)インスタンス
    キュー構成の作成
    @Configuration
    public class RabbitConfig {
    
        //      
        @Bean
        public Queue helloQueue() {
            return new Queue("hello");
        }
    
        @Bean
        public Queue fooQueue() {
            return new Queue("foo");
    }
    

    生産者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: Sender
     * Author:   zhao
     * Date:     2018/11/14 15:28
     * Description:    
     * History:
     *           

    消費者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: Receiver
     * Author:   zhao
     * Date:     2018/11/14 15:28
     * Description:    
     * History:
     *           

    テストクラスおよび結果
    こちらから1本出して、1本受け取りました
    //      
    @Test
    public void easy() {
    
        //    
        //        Sender : hello Wed Nov 14 19:33:16 GMT+08:00 2018
        //        Receiver : hello Wed Nov 14 19:33:16 GMT+08:00 2018
        sender.send();
        // sender.sendFoo();
    }
    

    一対多のメッセージ
    キュー構成の作成
        //      
        @Bean
        public Queue multimapQueue1() {
            return new Queue("OneToMany");
        }
    

    生産者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: one2ManySender
     * Author:   zhao
     * Date:     2018/11/14 16:57
     * Description:      
     * History:
     *           

    消費者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: OneToManyReceiver1
     * Author:   zhao
     * Date:     2018/11/14 16:59
     * Description:       1
     * History:
     *           
    /*
     * Copyright (C), 2015-2018
     * FileName: OneToManyReceiver2
     * Author:   zhao
     * Date:     2018/11/14 16:59
     * Description:       2
     * History:
     *           

    テストクラス、説明および結果
    1つの送信側、2つの受信側で、結果が平均的に分布していることがわかります.
    //        
    @Test
    public void testOneToMany() throws Exception {
        //      ,2    ,            
        //   
        // OneToManySender : OneToMany Wed Nov 14 19:37:17 GMT+08:00 2018
        //OneToManyReceiver2 : OneToMany Wed Nov 14 19:37:17 GMT+08:00 2018
        //OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManyReceiver1 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManyReceiver2 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManyReceiver1 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManyReceiver2 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManyReceiver1 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        //OneToManyReceiver2 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
        for (int i = 0; i < 100; i++) {
            oneToManySender.send();
            Thread.sleep(100);
        }
    }
    

    複数対複数のメッセージ
    キュー構成の作成
    
    //      
    @Bean
    public Queue multimapQueue3() {
        return new Queue("manyToMany");
    }
    

    生産者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: ManyToManySender
     * Author:   zhao
     * Date:     2018/11/14 16:57
     * Description:      
     * History:
     *           
    /*
     * Copyright (C), 2015-2018
     * FileName: ManyToManySender
     * Author:   zhao
     * Date:     2018/11/14 16:57
     * Description:      
     * History:
     *           

    消費者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: ManyToManyReceiver1
     * Author:   zhao
     * Date:     2018/11/14 16:59
     * Description:       1
     * History:
     *           
    /*
     * Copyright (C), 2015-2018
     * FileName: ManyToManyReceiver2
     * Author:   zhao
     * Date:     2018/11/14 16:59
     * Description:       2
     * History:
     *           
    /*
     * Copyright (C), 2015-2018
     * FileName: ManyToManyReceiver3
     * Author:   zhao
     * Date:     2018/11/14 16:59
     * Description:       1
     * History:
     *           

    テストクラス、説明および結果
    ここでは2対3の関係ですが、結果は平均的ではないように見えます.countを加えて、各受信者が実行した回数を統計します.最後に66.67.67であることがわかりました.だから平均的です.
    //        
    @Test
    public void testManyToMany() throws Exception {
        //   2 3   ,            ,
        //       count,             ,     66.67.67,
        //       
        //   
        //        manyToManyReceiver1.count: 67
        //        manyToManyReceiver2.count: 66
        //        manyToManyReceiver3.count: 67
        //        ManyToManyReceiver3 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManyReceiver1 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManySender1 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManySender2 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManyReceiver2 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManyReceiver3 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManySender1 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManySender2 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManyReceiver2 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManyReceiver1 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManySender1 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManySender2 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManyReceiver1 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
        //        ManyToManyReceiver3 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
    
        for (int i = 0; i < 100; i++) {
            manyToManySender.send();
            manyToManySender2.send();
            Thread.sleep(100);
        }
        System.out.println(
                "manyToManyReceiver1.count: " + manyToManyReceiver1.count + "
    " + "manyToManyReceiver2.count: " + manyToManyReceiver2.count + "
    " + "manyToManyReceiver3.count: " + manyToManyReceiver3.count + "
    "); }

    オブジェクトの送信
    キュー構成の作成
    //       
    @Bean
    public Queue entityQueue() {
        return new Queue("entity");
    }
    

    オブジェクト
    /*
     * Copyright (C), 2015-2018
     * FileName: User
     * Author:   zhao
     * Date:     2018/11/14 18:25
     * Description:   --  
     * History:
     *           

    生産者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: Sender
     * Author:   zhao
     * Date:     2018/11/14 15:28
     * Description:    
     * History:
     *           

    消費者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: Receiver
     * Author:   zhao
     * Date:     2018/11/14 15:28
     * Description:    
     * History:
     *           

    テストクラス、説明および結果
    エンティティにSerializableインタフェースを実装させると、直接送信できます.
    //       
    @Test
    public void entity() {
        //      Serializable  ,       
        //   
        // Sender : User{id=1, name='  '}
        // Receiver : User{id=1, name='  '}
        entitySender.send();
    }
    

    Topic Exchange
    キュー構成の作成
    //   topic
    final static String message = "topic.message";
    final static String messages = "topic.messages";
    
    @Bean
    public Queue queueMessage() {
        return new Queue(RabbitConfig.message);
    }
    
    @Bean
    public Queue queueMessages() {
        return new Queue(RabbitConfig.messages);
    }
    
    @Bean
    TopicExchange exchange() {
        return new TopicExchange("exchange");
    }
    
    @Bean
    Binding bindingExchangeMessage(Queue queueMessage, TopicExchange exchange) {
        return BindingBuilder.bind(queueMessage).to(exchange).with("topic.message");
    }
    
    @Bean
    Binding bindingExchangeMessages(Queue queueMessages, TopicExchange exchange) {
        return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#");
    }
    

    生産者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: Sender
     * Author:   zhao
     * Date:     2018/11/14 15:28
     * Description:    
     * History:
     *           

    消費者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: Receiver
     * Author:   zhao
     * Date:     2018/11/14 15:28
     * Description:    
     * History:
     *           
    /*
     * Copyright (C), 2015-2018
     * FileName: Receiver
     * Author:   zhao
     * Date:     2018/11/14 15:28
     * Description:    
     * History:
     *           

    テストクラスおよび結果
    // topic --     key     
    @Test
    public void topic() {
        //   queueMessages    ,   2 key  ,
        //   topic.messages        
        //      2 topic.messages   
    
        //   
        // Sender : hi, i am message 1
        // Sender : hi, i am messages 2
        // TopicReceiver2 : hi, i am message 1
        // TopicReceiver1 : hi, i am message 1
        // TopicReceiver2 : hi, i am messages 2
    
        topicSender.send1();
        topicSender.send2();
    }
    

    Fanout Exchange
    キュー構成の作成
    //   fanout
        @Bean
        public Queue AMessage() {
            return new Queue("fanout.A");
        }
    
        @Bean
        public Queue BMessage() {
            return new Queue("fanout.B");
        }
    
        @Bean
        public Queue CMessage() {
            return new Queue("fanout.C");
        }
    
        @Bean
        FanoutExchange fanoutExchange() {
            return new FanoutExchange("fanoutExchange");
        }
    
        @Bean
        Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) {
            return BindingBuilder.bind(AMessage).to(fanoutExchange);
        }
    
        @Bean
        Binding bindingExchangeB(Queue BMessage, FanoutExchange fanoutExchange) {
            return BindingBuilder.bind(BMessage).to(fanoutExchange);
        }
    
        @Bean
        Binding bindingExchangeC(Queue CMessage, FanoutExchange fanoutExchange) {
            return BindingBuilder.bind(CMessage).to(fanoutExchange);
        }
    

    生産者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: Sender
     * Author:   zhao
     * Date:     2018/11/14 15:28
     * Description:    
     * History:
     *           

    消費者の作成
    /*
     * Copyright (C), 2015-2018
     * FileName: FanoutReceiver
     * Author:   zhao
     * Date:     2018/11/14 18:58
     * Description: fanout   
     * History:
     *           
    /*
     * Copyright (C), 2015-2018
     * FileName: FanoutReceiver
     * Author:   zhao
     * Date:     2018/11/14 18:58
     * Description: fanout   
     * History:
     *           
    /*
     * Copyright (C), 2015-2018
     * FileName: FanoutReceiver
     * Author:   zhao
     * Date:     2018/11/14 18:58
     * Description: fanout   
     * History:
     *           

    テストクラスおよび結果
    ここはブロードキャストなので、一度送信すると、3つのクライアントが受信できます.
    // fanout --     
    @Test
    public void fanout() {
        //       ,      ,          
        //   
        // Sender : hi, fanout msg
        // FanoutReceiverB : hi, fanout msg
        // FanoutReceiverC : hi, fanout msg
        // FanoutReceiverA : hi, fanout msg
        fanoutSender.send1();
    }
    

    リファレンスリンク
    http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html
    連絡先
    プロジェクトコードパスコードクラウド:https://gitee.com/lizhaoandroid/Springboot-Learning-lz
    連絡先:QQ 3060507060
    次の記事またはその他の記事を表示するには、目次またはコラムをクリックして表示します.