Análisis de cómo opera NodeJS la cola de mensajes RabbitMQ
Este artículo presenta principalmente el análisis de cómo NodeJS opera la cola de mensajes RabbitMQ. Tiene cierto valor de referencia. Ahora se comparte con todos los amigos que lo necesiten.
1. ¿Qué es una cola de mensajes? El mensaje se refiere a los datos transmitidos entre aplicaciones. Los mensajes pueden ser muy simples y contener sólo cadenas de texto, o más complejos y posiblemente contener objetos incrustados.
Message Queue (Message Queue) es un método de comunicación entre aplicaciones. Los mensajes se pueden devolver inmediatamente después de ser enviados. El sistema de mensajes garantiza una entrega confiable de los mensajes. El editor del mensaje simplemente publica el mensaje en MQ y no le importa quién lo recibe, y el consumidor del mensaje simplemente recibe el mensaje de MQ independientemente de quién lo publique. De esta forma, ni el editor ni el usuario necesitan conocer la existencia de la otra parte.
2. ¿Cuáles son las colas de mensajes más utilizadas? RabbitMQ, RocketMQ, ActiveMQ, Kafka, ZeroMQ, MetaMq.
Incluso ahora algunos NoSQL también se pueden utilizar como colas de mensajes, como Redis.
3. ¿Cuáles son los escenarios de uso de la cola de mensajes? Aplicación de procesamiento asincrónico desacoplamiento reducción de picos de tráfico 4. Casos de uso Las grandes empresas tendrán su propio sistema de análisis de registros. ¿Cómo se implementa el sistema de registros?
Ilustración: cuando un usuario accede a una aplicación, necesitamos registrar los registros de operación del usuario y los registros de excepciones del sistema. El método convencional es guardar los registros generados por el sistema en el disco del servidor e iniciar las tareas programadas. el servidor. , transfiere periódicamente la información de registro desde el disco a mq (productor) y también extrae periódicamente los mensajes de mq y los almacena en la base de datos correspondiente, como ElasticSearch o Hive.
5. ¿Cómo instalar RabbitMQ? El caso anterior presenta un escenario de uso de MQ. Aquí estoy usando RabbitMQ como ejemplo. Kafka se puede usar en proyectos reales.
Primero instale brew (mac como ejemplo)
/usr/bin/ruby -e "$(curl -fsSL /Homebrew/install/master/install)"Instalar RabbitMQ
p>brew install Rabbitmq para ejecutar RabbitMQ
Vaya a /usr/local/Cellar/rabbitmq/3.7.7 y ejecute
sbin/rabbitmq-server para inicie el complemento
Ingrese /usr/local/Cellar/rabbitmq/3.7.7/sbin
./rabbitmq-plugins habilite la interfaz de administración de inicio de sesión de Rabbitmq_management
Abra el navegador e ingrese: http://localhost: 15672, RabbitMQ tiene por defecto el puerto seis 15672. Nodejs opera RabbitMQ
Se pueden encontrar en línea varios SDK de Node correspondientes, y se recomienda amqplib aquí
1. Productor
/**
* Encapsulación de RabbitMQ
*/
let amqp = require('amqplib ');
clase RabbitMQ {
constructor() {
this.hosts = [];
this.length = this.hosts.length;
this.open = amqp.connect(this.hosts[this.index]);
}
sendQueueMsg(queueName, msg, errCallBack) {
let self = this;
self.open
.then(función (conn) {
return conn.createChannel();
})
.then(function (canal) {
return channel.assertQueue(queueName).luego (función (ok) {
return channel.sendToQueue(queueName, new Buffer(msg), {
persistente: verdadero
});
})
.then(función (datos) {
if (datos) {
errCallBack amp ; errCallBack("éxito" );
canal.close();
}
})
.catch(función ( ) {
setTimeout(() =gt; {
if (canal) {
canal.close();
}
}, 500)
});
})
p>
.catch(function() {
let num = self.index;
if (num lt; = self.length - 1) {
self.open = amqp.connect(self.hosts[num]);
} else {
self.index == 0;
}
});
}
}2. Consumidor
/**
* Sí RabbitMQ encapsulación
*/
let amqp = require('amqplib');
clase RabbitMQ {
constructor() { p>
this.open = amqp.connect(this.hosts[this.index]);
}
recibirQueueMsg(queueName, recibirCallBack, errCallBack) {< /p >
let self = this;
self.open
.then(function (conn) {
return conn.createChannel(); p>
})
.then(function (canal) {
return canal.assertQueue(queueName)
.then(function ( ok) {
return canal.consume(queueName, function (msg) {
if (msg !== null) {
let data = msg. content. toString();
canal.ack(msg);
recibirCallBack amp; recibirCallBack(datos); })
.finally(function () {
setTimeout(() =gt; {
if (canal) {
canal.close();
}
}, 500)
}); > })
.catch(function () {
let num = self.index;
if (num lt; = self.length - 1) {
self.open = amqp.connect(self.hosts[num]);
} else {
self.index = 0;< /p >
self.open = amqp.connect(self.hosts[0]);
}
});
}3. mensaje a MQ a través del productor y crear una cola
let mq =
new RabbitMQ();
mq.sendQueueMsg('testQueue', 'mi primer mensaje', (error) =gt; {
console.log(error)
}) Después de la ejecución, abrimos la plataforma de administración y descubrimos que RabbbitMQ había recibido un mensaje:
Y RabbbitMQ agregó una nueva cola testQueue
Obtenga el mensaje del. cola especificada
let mq = new RabbitMQ();
mq.receiveQueueMsg('testQueue', (msg) =gt; {
console.log( msg)
})// Resultado de salida: mi primer mensaje Abra la plataforma de administración RabbitMQ en este momento y la cantidad de mensajes se ha convertido en 0
En resumen: hablamos brevemente sobre la cola de mensajes y RabbitMQ relacionados. Algunos conocimientos sobre cómo producimos y consumimos mensajes a través de nodejs.