Spring Boot統合RabbiitMQメッセージキュー非注釈式の原始的な動作フローの詳細説明


MQはすべてMessage Queueと呼ばれ、すなわちメッセージ・キュー、RabbitMQはerlang言語によって開発され、AMQP(Advanced Message Que)プロトコルに基づいて実現されるメッセージ・キューであり、アプリケーション間の通信方法であり、メッセージ・キューは分散システム開発において非常に広く使用されている.RabbiitMQ公式アドレス:http://www.rabbitmq.com/利点:
  • Spring BootはデフォルトではRabbiitMQに統合されています.
  • 使用は簡単で、機能が強いです.
  • は、AMQPプロトコルに基づく.
  • 高合併性能が良く、エラン語に基づいています.
  • RabbiitMQ属性の簡単な説明:
  • Broker:メッセージキューサービスプロセスは、2つの部分を含む:ExchangeとQue.
  • Exchange:メッセージキュースイッチは、ある規則に従ってメッセージをあるキューに転送し、メッセージを過大視します.
  • Queue:メッセージ・キュー、メッセージを格納するキュー、メッセージがキューに到着し、指定された消費者に転送される.
  • Producer:メッセージ生産者、すなわち生産者クライアントは、MQにメッセージを送信する.
  • Consmer:メッセージ消費者、すなわち消費者クライアントは、MQ転送のメッセージを受信する.
  • メッセージ投稿受信フロー:
    -----メッセージの送信-----
    ----受信メッセージ-----
    1,生産者とBrokerがTCP接続を確立する
    1,消費者とBrokerがTCP接続を確立する
    2,生産者とBrokerが通路を作る
    2,消費者とBrokerが通路を作る
    3,生産者はチャネルメッセージを介してBrokerに送信し、Exchangeでメッセージを転送します.
    3、消費者は指定されたQueue(キュー)を傍受します.
    4,Exchangeは指定されたQueにメッセージを転送します.
    4,Queueueに到着したというニュースがあるときは、Brokerはデフォルトで消費者にメッセージを送る.
    5,消費者はメッセージを受信する.
    依存をインポート:
    <dependency>
        <groupId>com.rabbitmqgroupId>
        <artifactId>amqp‐clientartifactId>
        <version>   version><!‐‐     SpringBoot       ‐‐>
    dependency>
    <dependency>
       <groupId>org.springframework.bootgroupId>
       <artifactId>spring‐boot‐starter‐loggingartifactId>
    dependency>
    
    作成者:
    public class Producer {
    private static final String QUEUE_Name = "newRabbitMQ";//    
    public static void main(String[] args) throws IOException, TimeoutException {
    Connection connection = null;//    ,   null,  
    Channel channel = null;//    ,   null,  
    try
    {
    ConnectionFactory factory = new ConnectionFactory();//      
    factory.setHost("");//RabbitMQ      IP  ,       127.0.0.1
    factory.setPort(5672);//java          ,    15672
    factory.setUsername("guest");//RabbitMQ     
    factory.setPassword("guest");//RabbitMQ    
    factory.setVirtualHost("/");//rabbitmq        “/”,           mq  
     
    //   RabbitMQ   TCP  
    connection = factory.newConnection();
    //   Exchange   ,            ,            
    channel = connection.createChannel();
    /*    ,  Rabbit           */
    channel.queueDeclare(QUEUE_Name/*    */,
                         true/*     */,
                         false/*         */, 
                         false/*                */,
                         null/*    */);
    String message = "hello,RabbitMQ"+System.currentTimeMillis();//        ,       
    
    /**
    *          ,           ,                ,            
    *      ,routingKey      
    */
    channel.basicPublish/*       */(""/*Exchange   ,      ,   Default Exchange*/,
                        QUEUE/*routingKey,     Key,   Exchange(   )             */, 
                        null/*       */, 
                        message.getBytes())/*   */;
    System.out.println("Send Message is:'" + message + "'");//       
           }catch(Exception ex){
                   ex.printStackTrace();//      
          }
     finally{
     if(channel != null){
             channel.close();//      
    }
     if(connection != null){
              connection.close();//      
              }
                 }
           }
    }
    
    
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    作成者:
    public class Consumer {
        private static final String QUEUE_Name = "newRabbitMQ";
        public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();//      
        factory.setHost(""); //RabbitMQ      IP  ,       127.0.0.1
        factory.setPort(5672);//java          ,    15672
        Connection connection = factory.newConnection();//    
        Channel channel = connection.createChannel();//    
        channel.queueDeclare(QUEUE_Name, true, false, false, null); //    ,      
        DefaultConsumer consumer = new DefaultConsumer(channel) //      {
        @Override
        public void handleDelivery(String consumerTag,//      , channel.basicConsume()   
                                   Envelope envelope,//      ,       id,  routingkey,   ,       ,    (               )
    
                                   AMQP.BasicProperties properties,//      
                                   byte[] body//       
                                   )throws IOException {
       String exchange = envelope.getExchange(); //   
       String routingKey = envelope.getRoutingKey();//  key
       long deliveryTag = envelope.getDeliveryTag();//  id
       String msg = new String(body,"utf‐8");//    
       System.out.println("receive message.." + msg);
         }
    };
    channel.basicConsume(QUEUE_Name,/*    */
                              false,/*      ,   true           mq      ,mq          ,  
     false       ,        ,        !*/
                               consumer/*       ,              */
                         );
       }
    }
    
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ステップ
    プロセス情報
    生産者プロセス
    生産者操作フロー情報
    1
    接続を作成
    2
    チャンネルを作成
    3
    キューを宣言
    4
    メッセージを送信
    消費者プロセス
    消費者操作フロー情報
    1
    接続を作成
    2
    チャンネルを作成
    3
    キューを宣言
    4
    待ち受け行列
    5
    メッセージを受信する
    6
    ackリプライ
    結論(パッケージ構成情報):上記のコードはより複雑ですが、新米の友達のためにより明確で明瞭な運行プロセスを構築することができます.コードの多重性を向上させるために、一部をパッケージ化することもできます.(以下は参考として、自分の状況に応じて操作します.)
     public static Connection getConnection() throws Exception {
            ConnectionFactory factory = new ConnectionFactory();  //      
            factory.setHost("");//RabbitMQ      IP  ,       127.0.0.1 
            factory.setPort(5672);//java          ,    15672 
            factory.setVirtualHost("/");//rabbitmq     
            factory.setUsername("guest");//     
            factory.setPassword("guest");//    
            Connection connection = factory.newConnection();//         
            return connection;//      
        }
    
    君の日進金を祈って,事業の成功を祈っている.