dockerを使用してactiveMQのNIOプロトコルとNIO拡張を構成する方法

1つは、activemqミラーリングを開始する

開始(docker startコンテナー名)

docker start myactivemq
  • 途中で遭遇する可能性のあるいくつかの問題:解決策

2つ目は、コンテナーを入力して構成ファイルの場所を表示することです。

docker exec -it  daa8c6c30790 /bin/bash

ここに画像の説明を挿入
confファイルを探す

ls -s

ここに画像の説明を挿入
confを編集する

vi conf

ここに画像の説明を挿入
上下のキーを押して、activemq.xmlファイルを選択します
ここに画像の説明を挿入

3、構成ファイルを変更します

ActiveMQでサポートされているクライアントボーカー通信プロトコルは、TCP、NIO、UDP、SSL、HTTP(S)、VMです。TransportConnectorを構成するためのファイルは、activeMQインストールディレクトリのconf /activemq.xmlのラベルにあります。

aを入力して編集モードに入り、指定したページにスライドダウンします
ここに画像の説明を挿入

構成情報:
URL記述情報のヘッダーはプロトコル名を使用します

  • URL記述形式「amqp:// ...」を使用して、amqpプロトコルのリスニングポートを記述します。
  • URL記述形式「stomp:// ...」を使用して、Stompプロトコルのリスニングポートを記述します。
  • 一人でopenwireプロトコル説明するとき、URLヘッダーは「tcp:// ...」を使用します。理由は次のとおりです。activeMQのデフォルトのメッセージプロトコルはopenwireです

選択した領域を挿入します

 <transportConnector name="nio" uri="nio://0.0.0.0:61618?trace=true"/>

ここに画像の説明を挿入
図に示すように、ESCキーを押して編集モードを終了し、入力して:wq
保存して終了します

第四に、ミラーを再起動します

exit 
docker restart myactive  #这里使用自己的的容器名称

ここに画像の説明を挿入
ここに画像の説明を挿入
構成は成功しました

5、テスト

  • プロデューサー

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import javax.jms.Connection;
import javax.jms.JMSException;

public class JMSProduce {
    
    

    //public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61616";
    public static final String ACTIVEEMQ_URL = "nio://192.168.56.10:61618";
    //public static final String QUEUE_NAME = "queue01";
    public static final String QUEUE_NAME = "tansport";

    public static void main(String[] args) throws JMSException {
    
    
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVEEMQ_URL);


        Connection connection = connectionFactory.createConnection();
        connection.start();
        //创建服务对象session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //创建目的地Destination
        Queue queue = session.createQueue(QUEUE_NAME);

        //创建生产者,传入地址
        MessageProducer producer = session.createProducer(queue);
        //创建消息
        for(int i=0;i<6;i++){
    
    
            Message message = session.createTextMessage("tansport"+i);
            //生产者发送消息
            producer.send(message);

        }
        System.out.println("success");


        //关闭连接
        producer.close();
        session.close();
        connection.close();

    }
}

ここに画像の説明を挿入

  • 消費者
package T1;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.IOException;


public class JMSConsumer {
    
    
   public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61618";
    
   
    public static final String QUEUE_NAME = "tansport";

    public static void main(String[] args) throws JMSException, IOException {
    
    
        System.out.println("消费者2");
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVEEMQ_URL);


        Connection connection = connectionFactory.createConnection();
        connection.start();
        //创建服务对象session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //创建目的地Destination  --->ActiveMQ的接收点
        Queue queue =  session.createQueue(QUEUE_NAME);


        //创建生产者
        MessageConsumer messageConsumer = session.createConsumer(queue);

        /*


        while (true){
            TextMessage  message = (TextMessage) messageConsumer.receive();
            if (message != null){
                System.out.println("consumer消息接收"+message.getText());
            }else {
                break;
            }
        }
        */

        //监听的方式接收消息MessageListener()

         messageConsumer.setMessageListener(new MessageListener() {
    
    
             public void onMessage(Message message) {
    
    
                 if( null != message && message instanceof TextMessage){
    
    
                     TextMessage textMessage = (TextMessage) message;
                     try {
    
    
                         System.out.println("consumer消息接收"+textMessage.getText());
                     }
                     catch (Exception e){
    
    
                         e.printStackTrace();
                     }

                 }
             }
         });
         //保证控制台一直在线
        System.in.read();
        messageConsumer.close();
        session.close();
        connection.close();
        System.out.println("接收完成");
    }

}

ここに画像の説明を挿入
ここに画像の説明を挿入

6、nioは合意を強化します

<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61608?maximumConnection=1000&amp;wireFormat.maxFrameSize=104857600&amp;org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&amp;org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=50"/>

ここに画像の説明を挿入

図に示すように構成し、以前のデフォルトプロトコルからログアウトします

テスト1:public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61608";

  • プロデューサー

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import javax.jms.Connection;
import javax.jms.JMSException;

public class JMSProduce {
    
    

    //public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61616";
    public static final String ACTIVEEMQ_URL = "nio://192.168.56.10:61608";
    //public static final String QUEUE_NAME = "queue01";
    public static final String QUEUE_NAME = "nio-test";

    public static void main(String[] args) throws JMSException {
    
    
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVEEMQ_URL);


        Connection connection = connectionFactory.createConnection();
        connection.start();
        //创建服务对象session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //创建目的地Destination
        Queue queue = session.createQueue(QUEUE_NAME);

        //创建生产者,传入地址
        MessageProducer producer = session.createProducer(queue);
        //创建消息
        for(int i=0;i<6;i++){
    
    
            Message message = session.createTextMessage("niotest"+i);
            //生产者发送消息
            producer.send(message);

        }
        System.out.println("success");


        //关闭连接
        producer.close();
        session.close();
        connection.close();

    }
}
  • 消費者
package T1;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.IOException;


public class JMSConsumer {
    
    
   //public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61617";
    public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61608";
    //public static final String QUEUE_NAME = "queue01";
    public static final String QUEUE_NAME = "nio-test";

    public static void main(String[] args) throws JMSException, IOException {
    
    
        System.out.println("消费者2");
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVEEMQ_URL);


        Connection connection = connectionFactory.createConnection();
        connection.start();
        //创建服务对象session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //创建目的地Destination  --->ActiveMQ的接收点
        Queue queue =  session.createQueue(QUEUE_NAME);


        //创建生产者
        MessageConsumer messageConsumer = session.createConsumer(queue);

        /*


        while (true){
            TextMessage  message = (TextMessage) messageConsumer.receive();
            if (message != null){
                System.out.println("consumer消息接收"+message.getText());
            }else {
                break;
            }
        }
        */

        //监听的方式接收消息MessageListener()

         messageConsumer.setMessageListener(new MessageListener() {
    
    
             public void onMessage(Message message) {
    
    
                 if( null != message && message instanceof TextMessage){
    
    
                     TextMessage textMessage = (TextMessage) message;
                     try {
    
    
                         System.out.println("consumer消息接收"+textMessage.getText());
                     }
                     catch (Exception e){
    
    
                         e.printStackTrace();
                     }

                 }
             }
         });
         //保证控制台一直在线
        System.in.read();
        messageConsumer.close();
        session.close();
        connection.close();
        System.out.println("接收完成");
    }

}

ここに画像の説明を挿入
テスト成功
テスト2:TCPプロトコル
プロデューサー

   
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import javax.jms.Connection;
import javax.jms.JMSException;

public class JMSProduce {
    
    

    //public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61616";
    public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61608";
    //public static final String QUEUE_NAME = "queue01";
    public static final String QUEUE_NAME = "tcp-test";

    public static void main(String[] args) throws JMSException {
    
    
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVEEMQ_URL);


        Connection connection = connectionFactory.createConnection();
        connection.start();
        //创建服务对象session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //创建目的地Destination
        Queue queue = session.createQueue(QUEUE_NAME);

        //创建生产者,传入地址
        MessageProducer producer = session.createProducer(queue);
        //创建消息
        for(int i=0;i<6;i++){
    
    
            Message message = session.createTextMessage("tcptest"+i);
            //生产者发送消息
            producer.send(message);

        }
        System.out.println("success");


        //关闭连接
        producer.close();
        session.close();
        connection.close();

    }
}

消費者

package T1;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.IOException;


public class JMSConsumer {
    
    
   //public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61617";
    public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61608";
    //public static final String QUEUE_NAME = "queue01";
    public static final String QUEUE_NAME = "tcp-test";

    public static void main(String[] args) throws JMSException, IOException {
    
    
        System.out.println("消费者2");
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVEEMQ_URL);


        Connection connection = connectionFactory.createConnection();
        connection.start();
        //创建服务对象session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //创建目的地Destination  --->ActiveMQ的接收点
        Queue queue =  session.createQueue(QUEUE_NAME);


        //创建生产者
        MessageConsumer messageConsumer = session.createConsumer(queue);

        /*


        while (true){
            TextMessage  message = (TextMessage) messageConsumer.receive();
            if (message != null){
                System.out.println("consumer消息接收"+message.getText());
            }else {
                break;
            }
        }
        */

        //监听的方式接收消息MessageListener()

         messageConsumer.setMessageListener(new MessageListener() {
    
    
             public void onMessage(Message message) {
    
    
                 if( null != message && message instanceof TextMessage){
    
    
                     TextMessage textMessage = (TextMessage) message;
                     try {
    
    
                         System.out.println("consumer消息接收"+textMessage.getText());
                     }
                     catch (Exception e){
    
    
                         e.printStackTrace();
                     }

                 }
             }
         });
         //保证控制台一直在线
        System.in.read();
        messageConsumer.close();
        session.close();
        connection.close();
        System.out.println("接收完成");
    }

}

ここに画像の説明を挿入
テストに成功
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_44763595/article/details/109843688