Primavera-Boot --------- RabbitMQ (cola de mensajes)

En primer lugar, la escena servicio de noticias

1, el procesamiento asincrónico

Aquí Insertar imagen Descripción
Un inicio de sesión de usuario, información de registro en la base de datos, y el registro de correo electrónico y SMS enviar. Dicha llamada de sincronización necesita cada paso de 50 ms, que será muy lenta. (Mensajes de correo electrónico y mensajes de texto en lugar de enviar las necesidades de los usuarios a ver de inmediato los resultados, se puede reducir la velocidad de proceso).
Aquí Insertar imagen Descripción
Hay una segunda manera, el uso de la aplicación multi-hilo de mensajes de correo electrónico y de texto, por lo que sólo necesita 100 ms, esto sigue siendo demasiado lento.
Aquí Insertar imagen Descripción
En la tercera realización, después de que la base de datos de información de registro a escribir, a continuación, la información se escribe en utilizar la cola de mensajes, y luego envía un mensaje SMS y se puede leer en el mensaje de cola de procesamiento posterior por parte de lectura asíncrona.

2, la aplicación de desacoplamiento

Aquí Insertar imagen Descripción
Orden y sistema de escritura en la que una sola aplicación, ha de acoplarse, reducción de inventario único sistema de inventario. Proceso será muy lento.
Aquí Insertar imagen Descripción

El sistema de sistema de inventario y el orden se hace micro-servicios extraídos por separado, inmediatamente órdenes del sistema para escribir una sola cola de mensajes, recibe información de la orden de inmediato el sistema de inventario, el sistema calcula las operaciones de inventario de stock relacionadas.

3, el recorte de flujo

Aquí Insertar imagen Descripción
Se aplica a la espiga, si hay 10.000 de bienes, 100.000 individuos a pico, las solicitudes de todo el mundo enviar, Tomcat para su procesamiento, es fácil caer. cola de mensajes de solicitud, cola de mensajes petición del usuario, añadir el valor máximo de la cola de mensajes, sólo almacenan diez mil, que pronto vendrá primero en entrar en la cola. La eliminación de la lógica de negocio pico para el procesamiento de un mensaje de la cola de mensajes lentamente.

En segundo lugar, el concepto

  1. En la mayoría de aplicaciones, servicio de mensajes middleware puede ser mediante el levantamiento de sistema de comunicación asíncrona, la expansión de la capacidad de desacoplamiento

  2. Dos conceptos importantes:

    1. intermediario de mensajes (intermediario de mensajes) y destino (destino)
    2. Cuando el remitente del mensaje para enviar un mensaje, el mensaje se hará cargo de la agencia, el agente Mensaje para asegurar la entrega de mensajes a un destino especificado.
  3. Hay dos formas principales de la cola de mensajes del destino

    1. Queue (cola): Envío de mensajes entre pares (punto-a-punto)
      • remitente del mensaje envía un mensaje, el intermediario de mensajes puso en una cola, el destinatario del mensaje adquiere el contenido del mensaje de la cola, después de leer el mensaje quitadas
      • Sólo Noticias el único del emisor y aceptado por, pero no quiere decir que sólo un destinatario
    2. Tema (tema): publicación (publicar) / mensajería suscribirse (suscripción)
      • El remitente (editor) envía un mensaje con el tema, múltiples destinatarios (abonados) escucha (suscribirse a) este tema, recibirá un mensaje en el mismo momento en que llega un mensaje
  4. JMS (Java Message Service) Java Message Service:

    • especificación JVM se basa en el intermediario de mensajes. ActiveMQ, HornetMQ es la implementación de JMS
  5. AMQP (Protocolo de mensajes de cola avanzada)

    • Avanzada Protocolo de mensajes de cola, es un mensaje de especificación agente de JMS compatibles
    • RabbitMQ AMQP es lograr una

      ETC. AMQP
      definiciones fuego de Java protocolo de red de nivel de línea
      Cruz-idioma no es
      Multiplataforma no es
      Modelo Mensaje ofrece dos modelos: (1), Peer-2-Peer (2), Pub / sub Proporciona modelo de cinco mensaje: (1), intercambio directo (2), el intercambio de cargabilidad de salida (3), el cambio del tema (4), cambio de cabeceras (5), cambio de sistema esencia, este último cuatro y JMS pub / sub modelo no hay mucha diferencia, sólo para hacer un desglose más detallado sobre el mecanismo de encaminamiento;
      Soporte tipo de mensaje Varios tipos de mensajes: TextMessage MapMessage BytesMessage StreamMessage ObjectMessage Mensaje (sólo el encabezado del mensaje y propiedades) byte [] Cuando la aplicación práctica, tiene un complejo mensaje, el mensaje puede ser enviado después de la serialización.
      Evaluación integral JMS define estándar de Java a nivel de API; en el sistema Java, varios clientes pueden interactuar a través de JMS tanto, no es necesario modificar el código de la aplicación, pero su pobre soporte para multi-plataforma; AMQP define una capa de protocolo de nivel de alambre estándar; multiplataforma natural, transversal lenguaje características.
  6. soporte de muelle

    • primavera-JMS proporciona JMS apoyo

    • primavera-conejo proporciona AMQP apoyo

    • Es necesario ConnectionFactory implementaciones para conectar con el intermediario de mensajes

    • Proporcionar la JmsTemplate , RabbitTemplate para enviar un mensaje

    • @JmsListener ( JMS ), @RabbitListener ( AMQP ) corredor mensaje escuchas comentario para mensajes publicados en el método

    • @EnableJms , @EnableRabbit apoyo abierto

  7. Primavera Boot configuración automática

    • JmsAutoConfiguration

    • RabbitAutoConfiguration

Tres, el perfil RabbitMQ

1, el concepto básico

RabbitMQ es un Erlang desarrollado por el AMQP (advanved el Protocolo de cola de mensajes) implementación de código abierto

  1. Mensaje

    • Mensaje, el mensaje es anónimo, que consiste en una cabecera de mensaje y un cuerpo de mensaje . El cuerpo del mensaje es opaca , y el encabezado del mensaje por una serie de atributos opcionales, estos atributos incluyen el enrutamiento de claves (claves de enrutamiento) , prioridad (prioridad con respecto a otros mensajes) , el modo de entrega ** (indica que el mensaje se puede requerir almacenamiento persistente) ** y así sucesivamente.
  2. Editor

    • Noticias productor , es también una aplicación cliente para publicar mensajes al conmutador .
  3. Intercambiar

    • Interruptor , para recibir un mensaje enviado por el productor y para encaminar los mensajes a las colas del servidor .
    • Intercambio Existen cuatro tipos: directos (por defecto), despliegue en abanico, el tema y los encabezados , el reenvío de mensajes de diferentes tipos de políticas de cambio diferir
  4. Cola

    • Las colas de mensajes , utilizados para guardar los mensajes enviados hasta al consumidor. Es un contenedor para el mensaje, el mensaje es el final. Un mensaje se puede poner en una o más colas. Mensaje ha sido en el interior de la cola, esperando a que los consumidores se conecten a la cola de lo eliminará.
  5. Unión

    • Encuadernación , para la asociación entre una cola de mensajes y los interruptores . Unión es una regla de enrutamiento basado en clave y el conmutador de conexión de la cola de mensajes, el interruptor puede ser entendida como una tabla de encaminamiento constituido por la unión.

    • Cambio de cola y vinculante pueden ser muchos a muchos relaciones.

  6. Conexión

    • conexión de red , tal como una conexión TCP.
  7. Canal

    • Channel , un bi-direccional conexión de datos de canal de flujo multiplexado independiente. conexión de canal virtual se establece en las conexiones TCP reales, los comandos AMQP se envían a través del canal, si se anuncia que la cola de suscripciones o recibir mensajes, estas acciones se realizan a través del canal. Desde el establecimiento de TCP y la destrucción se encuentran en órbita muy caro para el sistema operativo, por lo que la introducción del concepto del canal, con el fin de volver a utilizar una conexión TCP.
  8. Consumidor

    • Los consumidores mensaje que indica a los mensajes recibe de la cola de mensajes, la aplicación cliente.
  9. Anfitrión virtual

    • Alojamiento web , representa un grupo de interruptores, colas de mensajes y objetos relacionados. Alojamiento web se comparte el mismo entorno de autenticación y el cifrado de dominio servidor independiente. Es esencialmente una mini versión de servidor de RabbitMQ, con su propia cola, los interruptores, los mecanismos y los permisos de unión para cada host virtual. AMQP es la base del concepto de host virtual se debe especificar en el momento de la conexión, RabbitMQ es el host virtual por defecto /.
  10. Corredor

    • entidad de servidor de Message Queue representa

2, proceso de operación

Aquí Insertar imagen Descripción
proceso:

  1. Mensaje Propietario ( Editorial ) envía un mensaje (mensaje) para el intermediario de mensajes, es decir, el servidor de mensajes ( Broker ).
  2. A dentro del servidor host virtual llamado de alojamiento web , alojamiento web que tiene muchos de su propio interruptor (la Bolsa) , cola (cola) .
  3. Enviar un mensaje al anfitrión virtual (Vhost) , al intercambiador de host virtual designado (intercambio).
  4. mensaje Intercambiador (Exchange) de acuerdo con la clave de enrutamiento ( enrutamiento-Key en la toma final) se determina mensaje enrutado a la cola de mensajes ** (cola) ** dentro, reglas de enrutamiento por la relación (unión la unión ) representado. Cuando el mensaje llega a la cola de mensajes, el consumidor ** (Consumer) ** el mensaje puede ser retirado de la cola de mensajes.
  5. Se establece consumidores cola de mensajes y una conexión (conexión), para establecer una conexión con el fin de ahorrar recursos, la multiplexación, abre mucho en cada conexión TCP en el interior del tubo (canal) , que los datos en la tubería de intercambio, para obtener el mensaje de la cola datos se devuelven al consumidor (consumidor) a través de la tubería

3, el tipo de cambio

Cambio de tener tiempo para distribuir mensajes, dependiendo del tipo de diferencias de política de distribución, había cuatro tipos: directa , despliegue en abanico , Tema , cabeceras . cabeceras de los mensajes AMQP coinciden exactamente con la cabecera de enrutamiento en lugar de llaves, interruptores y las cabeceras de intercambio directo, pero el rendimiento es pobre mucho, casi no se usa más, por lo que un aspecto aún más directa en tres tipos:

  1. directo
    Aquí Insertar imagen Descripción

Mensaje teclas de enrutamiento (clave de enrutamiento), y si la clave de unión La unión constante , el interruptor enviarán un mensaje a una cola correspondiente. Enrutamiento de teclas con el nombre de la cola de coincidencia exacta .

  1. fanOut

Aquí Insertar imagen Descripción

Cada tipo de postizo de pelo a los mensajes cargabilidad de salida se asignan a todas las colas ligada. interruptor de despliegue en abanico no procesa las teclas de enrutamiento , pero simplemente se une a las colas de los interruptores , cada uno de los mensajes que se envían al conmutador se envían a todas las colas atadas con el interruptor . Al igual que la difusión de subred, los hosts en cada subred han recibido una copia del mensaje. abanico de salida de reenviar el tipo de mensaje es el más rápido .

  1. Tema Tema partido mensaje de asignación conmutador de encaminamiento atributos clave modo de espera, las teclas de enrutamiento y una coincidencia de patrones , las necesidades de casos que se unen a un modo de cola. Se cortará la cadena y las teclas de enrutamiento vinculante en palabras clave, que están separados por puntos entre las palabras . También identificará dos comodines: símbolo "#" y el símbolo " " . # Partido 0 o más palabras ** **** coincida con una palabra.
    Aquí Insertar imagen Descripción

Cuatro, conejo integración MQ

1, la instalación y el inicio RabbitMQ

  1. Uso ventana acoplable dentro de una máquina virtual instalada RabbitMQ

    docker pull rabbitmq:3.8-management
    
  2. comienzo

    docker run -d -p 5672:5672 -p 15672:15672 --name myrabbismq rabbitmq的id
    
  3. Ver Run

    docker ps
    

2, los interruptores y añadir la cola de mensajes de acuerdo con los requisitos de configuración

Aquí Insertar imagen Descripción

Referencia sigue siendo de configuración de vídeo Silicon Valley

3, la integración de RabbitMQ

Agregar pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
  1. unicast lograr
/**
* @Description: 1、单播(点对点)
* @param:
* @return:
* @auther: zqq
* @date: 19/12/23 15:24
*/
@Test
void contextLoads() {
    //rabbitTemplate.send(exchange,routingKey,message);
    //Message需要自己后制造一个,定义消息体内容和消息头

    //object默认当成消息体,只需要传入要发送的对象,自动序列化发送给rabbit
    //rabbitTemplate.convertAndSend(exchange,routeKey,Object);

    HashMap<String, Object> map = new HashMap<>();
    map.put("msg","这是第一个消息");
    map.put("data", Arrays.asList("helloworld",123,true));
    //对象被默认序列化后发送出去
    rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",map);
}

//接收
@Test
public void receive(){
    Object o = rabbitTemplate.receiveAndConvert("atguigu.news");
    System.out.println("o.getClass() = " + o.getClass());
    System.out.println(o);
}
  1. Broadcast lograr
/**
* @Description: 广播
* @param:
* @return:
* @auther: zqq
* @date: 19/12/23 16:58
*/
@Test
public void sendMsg(){
    rabbitTemplate.convertAndSend("exchange.fanout","",new Book("西游记","吴承恩"));
}

3. Recibir una cola de mensajes

/*
*@EnableRabbit + @RabbitListtener监听消息队列
*/
@Service
public class BookService {

    @RabbitListener(queues = "atguigu.news")
    public void receive(Book book){
        System.out.println("book = " + book);
    }

    @RabbitListener(queues = "atguigu")
    public void receive2(Message message){
        System.out.println(message.getBody());
        System.out.println(message.getMessageProperties());
    }
}
  1. Messageconvter usando JSON serialización personalizada
@Configuration
public class MyAMQPConfig {

    /**
     * @Description: 自定义messageconvter
     * @param: 
     * @return: 
     * @auther: zqq
     * @date: 19/12/23 17:01
     */
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}
  1. AmqpAdmin crear y borrar de la cola, el intercambio, Encuadernación
/*
*AmqpAdmin:RabbitMQ系统功能组件
*    AmqpAdmin  : 创建和删除Queue,exchange,Binding
*/

@Test
public void createExchange(){
    //创建一个exchange
    amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
    //创建一个消息队列
    amqpAdmin.declareQueue(new Queue("amqpadmin.queue",true));
    //绑定
    amqpAdmin.declareBinding(new Binding("amqpadmin.queue", Binding.DestinationType.QUEUE,"amqpadmin.exchange",
                                         "amqp.haha",null));
}

dmin.declareExchange (nuevo nuevo DirectExchange ( "amqpadmin.exchange"));
// crear una cola de mensajes
amqpAdmin.declareQueue (nuevo nueva cola ( "amqpadmin.queue", a true));
// Enlazar
amqpAdmin.declareBinding (nuevo Encuadernación ( " amqpadmin.queue "Binding.DestinationType.QUEUE," amqpadmin.exchange",
"amqp.haha", null));
}


Publicado 26 artículos originales · ganado elogios 27 · vistas 6854

Supongo que te gusta

Origin blog.csdn.net/qq_40705355/article/details/103672023
Recomendado
Clasificación