¿Qué es una cola de mensajes?
Una cola de mensajes es un contenedor que guarda mensajes durante el proceso de transmisión de mensajes. Es esencialmente una cola (primero en entrar, primero en salir).
消息
se refiere a los datos que deben transmitirse, que pueden ser texto, cadena u objeto y otra información.
消息队列
es un servicio de comunicación entre dos aplicaciones.产生者
del mensaje puede devolverlo inmediatamente después de almacenar los datos en la cola de mensajes, sin esperar a que接收者
del mensaje responda. Es decir:生产者
se asegura de que los datos se inserten en la cola y no importa quién reciba el mensaje.接收者
del mensaje sólo se centra en recibir el mensaje y procesarlo.
¿Qué
desacoplamiento puede hacer la cola de mensajes? Como se mencionó anteriormente, la cola de mensajes separa al productor del mensaje y al receptor del mensaje, y ninguno se ve afectado por el otro.
Asincrónico Asincrónico es para reducir el tiempo de respuesta de las solicitudes. El productor del mensaje solo necesita procesar la lógica simple y colocar los datos en la cola de mensajes para devolver. La lógica compleja, como las operaciones de la base de datos y las operaciones de IO, son manejadas por el receptor. el mensaje.
Peak Shaving Cuando la aplicación de cola de mensajes está funcionando, puede guardar el flujo instantáneo de información de solicitud en la cola de mensajes y devolverla inmediatamente. Luego, la solicitud se procesa en función de los datos del destinatario del mensaje.
Escenarios de aplicación: actividades de juego, actividades de venta flash, realización de pedidos, etc. que provocarán un aumento instantáneo del tráfico.
Después de presentar la información básica de la cola de mensajes, antes de desarrollar la cola de mensajes, introduzcamos algunos conceptos básicos de cola de mensajes ~
productor de mensajes (productor) y consumidor (cliente)生产者
y消费者
mencionados anteriormente
.
Proporcionar
enlaces, canales y colas.
Conexión: representa un enlace entre el programa de servicio y la cola de mensajes. Un programa de servicio puede crear múltiples enlaces .
Canal: un canal entre enlaces de cola de mensajes. Un enlace puede tener varios canales .
Cola: una cola que almacena datos en una cola de mensajes. Un servicio de cola de mensajes puede tener varias colas.
En resumen, la relación entre enlaces y colas de canales es así
La cola de mensajesde Exchange (exchange)
debe tener un intercambio al enviar mensajes . Si no se especifica, se utilizará el intercambio predeterminado. La función del conmutador es enviar mensajes a la cola correspondiente. Hay un total de 4 tipos de conmutadores en la cola de mensajes
: Directo: especifica el modo de cola Cuando llega un mensaje, solo se enviará a la cola especificada y otras colas no lo recibirán.
fanout: modo de transmisión, cuando llega un mensaje, se enviará a todas las colas.
Tema: modo de coincidencia difusa, reenvío correspondiente mediante coincidencia difusa.
encabezado: Similar al modo Directo.
instalar cerveza Rabbitmq
Luego visite http://localhost:15672/ localmente para ver los antecedentes del servicio Rabbitmq. La contraseña inicial de la cuenta es guest
amqplib es un conjunto de herramientas para usar colas de mensajes en el nodo, lo que nos permite usar colas de mensajes rápidamente.
Crear productorDirección: https://www.npmjs.com/package/amqplib
/** producto.js consumidor*/ const amqplib = requerir('amqplib'); configuración constante = require('./config'); const {conectarUrl} = configuración; (asincrónico () => { conexión constante = esperar amqplib.connect(connectUrl); canal constante = espera conexión.createChannel(); const nombreIntercambio = 'testExchange'; clave constante = 'testQueue'; const sendMsg = 'hola conejomq'; // Conozca el tipo de cambio await channel.assertExchange(exchangeName, 'fanout', { duradero: cierto, }); //Especifica una cola de espera channel.assertQueue(key); para (sea i = 0; i < 100; i++) { canal.publish(exchangeName, clave, Buffer.from(`${sendMsg} ${i}`)); } esperar canal.cerrar(); espere conexión.close(); })();
Después de ejecutarlo, puede ver en segundo plano que se ha agregado una nueva cola con 100 mensajes.
Crear consumidor/** cliente.js consumidor*/ const amqplib = requerir('amqplib'); configuración constante = require('./config'); const {conectarUrl} = configuración; (asincrónico () => { dejar conexión = esperar amqplib.connect(connectUrl); const nombreIntercambio = 'testExchange'; clave constante = 'testQueue'; //Crear dos canales const canal1 = esperar conexión.createChannel(); const canal2 = espera conexión.createChannel(); //Especifica un intercambio en espera canal1.assertExchange(exchangeName, 'fanout', { duradero: cierto, }); //Especifica una cola de espera channel1.assertQueue(key); aguarde canal1.bindQueue (clave, nombre de intercambio, clave); canal1.consume(clave, (mensaje) => { console.log('canal 1', msg.content.toString()); }); espere canal2.assertExchange(exchangeName, 'fanout', { duradero: cierto, }); espere canal2.assertQueue (clave); aguarde canal2.bindQueue (clave, nombre de intercambio, clave); canal2.consume(clave, (mensaje) => { console.log('canal 2', msg.content.toString()); }); })();
Después de la ejecución, puede ver que ambos canales pueden funcionar al mismo tiempo para recibir mensajes.