Cómo configurar el protocolo NIO de activeMQ y la mejora de NIO con Docker

Uno, inicie la duplicación de activemq

Inicio (nombre del contenedor de inicio de la ventana acoplable)

docker start myactivemq
  • Algunos problemas que puede encontrar a mitad de camino: soluciones

Dos, ingrese al contenedor para ver la ubicación del archivo de configuración

docker exec -it  daa8c6c30790 /bin/bash

Inserte la descripción de la imagen aquí
Encuentra el archivo conf

ls -s

Inserte la descripción de la imagen aquí
Editar conf

vi conf

Inserte la descripción de la imagen aquí
Presione las teclas de arriba y abajo para seleccionar el archivo activemq.xml
Inserte la descripción de la imagen aquí

Tres, cambia el archivo de configuración

Los protocolos de comunicación cliente-borker admitidos por ActiveMQ son: TCP, NIO, UDP, SSL, HTTP (S), VM El archivo para configurar TransportConnector se encuentra en la etiqueta conf / activemq.xml en el directorio de instalación de activeMQ.

Ingrese a para ingresar al modo de edición y deslícese hacia abajo hasta la página especificada
Inserte la descripción de la imagen aquí

Información de configuración:
el encabezado de la información de descripción de la URL utiliza el nombre del protocolo

  • Describe el puerto de escucha del protocolo amqp, usando el formato de descripción de URL "amqp: // ..."
  • Describe el puerto de escucha del protocolo Stomp, usando el formato de descripción de URL "stomp: // ..."
  • Soloprotocolo openwireAl describir, el encabezado de la URL usa "tcp: // ..." porque: el protocolo de mensaje predeterminado en activeMQ es openwire

Insertar área seleccionada

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

Inserte la descripción de la imagen aquí
Como se muestra en la figura, presione la tecla ESC para salir del modo de edición y luego escriba para :wq
guardar y salir

Cuarto, reinicia el espejo

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

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
La configuración es exitosa

Cinco, prueba

  • Productor

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

    }
}

Inserte la descripción de la imagen aquí

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

}

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Seis, nio refuerza el acuerdo

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

Inserte la descripción de la imagen aquí

Configure como se muestra en la figura y cierre la sesión de los protocolos predeterminados anteriores

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

  • Productor

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

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

}

Inserte la descripción de la imagen aquí
Prueba exitosa
Prueba 2:
productor de protocolo 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();

    }
}

consumidor

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

}

Inserte la descripción de la imagen aquí
probando exitosamente
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44763595/article/details/109843688
Recomendado
Clasificación