How to configure activeMQ's NIO protocol and NIO enhancement with docker

One, start activemq mirroring

Start (docker start container name)

docker start myactivemq
  • Some problems you may encounter halfway: solutions

Two, enter the container to view the location of the configuration file

docker exec -it  daa8c6c30790 /bin/bash

Insert picture description here
Find the conf file

ls -s

Insert picture description here
Edit conf

vi conf

Insert picture description here
Press the up and down keys to select the activemq.xml file
Insert picture description here

Three, change the configuration file

The client-borker communication protocols supported by ActiveMQ are: TCP, NIO, UDP, SSL, HTTP(S), VM. The file for configuring the TransportConnector is in the label of conf/activemq.xml in the activeMQ installation directory.

Enter a to enter the edit mode and slide down to the specified page
Insert picture description here

Configuration information:
The header of the URL description information uses the protocol name

  • Describe the listening port of the amqp protocol, using the URL description format "amqp://..."
  • Describe the listening port of the Stomp protocol, using the URL description format "stomp://..."
  • Aloneopenwire protocolWhen describing, the URL header uses "tcp://..." because: the default message protocol in activeMQ is openwire

Insert selected area

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

Insert picture description here
As shown in the figure, press the ESC key to exit the editing mode, and then type to :wq
save and exit

Fourth, restart the mirror

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

Insert picture description here
Insert picture description here
Configuration is successful

Five, test

  • Producer

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();

    }
}

Insert picture description here

  • consumer
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("接收完成");
    }

}

Insert picture description here
Insert picture description here

Six, nio strengthens the agreement

<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"/>

Insert picture description here

Configure as shown in the figure and log out the previous default protocols

Test 1:public static final String ACTIVEEMQ_URL = "tcp://192.168.56.10:61608";

  • Producer

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();

    }
}
  • consumer
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("接收完成");
    }

}

Insert picture description here
Test successful
Test 2: TCP protocol
producer

   
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();

    }
}

consumer

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("接收完成");
    }

}

Insert picture description here
testing successfully
Insert picture description here

Guess you like

Origin blog.csdn.net/weixin_44763595/article/details/109843688