Hola, querido programador, bienvenido a mi serie de artículos de tecnología dedicada a NSQ . No hay tantos tutoriales sobre esta tecnología, así que decidí hacer uno. ¡Espero que lo disfrutes!
Foto de Anastasia Dulgier en Unsplash

¿Por qué NSQ?

NSQ es una plataforma de mensajería distribuida en tiempo real escrita en Go y creada por el conocido servicio bit.ly.
Es simple y simple en comparación con sistemas similares (como RabbitMQ), fácil de usar y tiene una buena interfaz de usuario de administración intuitiva. Si nunca antes ha utilizado un sistema de Message Queue, NSQ es la mejor opción para comprender sus principios.

Concepto de cola de mensajes:

Message Queue es una implementación del patrón arquitectónico de editor / suscriptor que se utiliza para la comunicación entre diferentes partes (aplicaciones, servicios, etc.) de su sistema.
En palabras básicas, cuando ocurre un evento (por ejemplo, se crea un nuevo usuario), se publica un mensaje en una cola de mensajes. Cualquier servicio que esté interesado en ese evento está suscrito a ese mensaje.
Tan pronto como se publica el mensaje, el servicio interesado (consumidor) recibe un mensaje y realiza algunas acciones. (por ejemplo, enviar un correo electrónico a un nuevo usuario).

1. Descargar NSQ

Vaya a https://nsq.io/deployment/installing.html y descargue nsq binary para su sistema operativo.
Abra la carpeta extraída y allí puede ver diferentes ejecutables:
  • nsqlookupd.exe
  • nsqd.exe
  • nsqadmin.exe
  • .. y muchos otros pero no son tan importantes para nosotros

2. Ejecute nsqlookupd

Abra el directorio extraído en el terminal de shell / comando que prefiera y ejecute:
Debería ver el siguiente resultado:
$ ./nsqlookupd 
[nsqlookupd] 2019/10/21 13: 21: 18.830625 INFORMACIÓN: nsqlookupd v1.2.0 (construido con go1.12.9) 
[nsqlookupd] 2019/10/21 13: 21: 18.832649 INFORMACIÓN: TCP: escuchando en [::]: 4160 
[nsqlookupd] 2019/10/21 13: 21: 18.832649 INFO: HTTP: escuchando en [::]: 4161
Lo que dice que nsqlookupd se está ejecutando y tiene dos interfaces:
una está usando TCP con el puerto 4160 y otra está usando HTTP con el puerto 4161.
Para comprobar que funciona, podemos abrir el navegador y acceder a http: // localhost: 4161 / topics
Esta es la respuesta que debe obtener y está bien. En este momento todavía no tenemos ningún tema registrado.
También puede obtener todos los canales, productores para un tema específico, nodos de nsqd, crear temas, canales, etc. Encuentre más en la documentación aquí.
Básicamente, nsqlookupd es un servicio de descubrimiento que ayuda a los consumidores a encontrar productores de nsqd para un tema específico.
nsqlookupd es el demonio que gestiona la información de topología. Los clientes consultan nsqlookupd para descubrir productores nsqd para un tema específico y los nodos nsqd difunden información sobre temas y canales.

3. Ejecute nsqd

Ahora ejecuta en shell nsqd:
Debería ver el siguiente resultado:
[nsqd] 2019/10/21 13: 39: 56.997863 INFORMACIÓN: nsqd v1.2.0 (construido con go1.12.9) 
[nsqd] 2019/10/21 13: 39: 56.998861 INFORMACIÓN: ID: 791 
[nsqd] 2019 / 21/10 13: 39: 57.000861 INFORMACIÓN: NSQ: tema persistente / metadatos de canal a nsqd.dat 
[nsqd] 2019/10/21 13: 39: 57.011825 INFORMACIÓN: HTTP: escuchando en [::]: 4151 [nsqd] 2019 / 10/21 13: 39: 57.011825 INFO: TCP: escuchando en [::]: 4150

4. Publica un mensaje

Ahora es el momento de publicar nuestro primer mensaje para hacer cola. Abra el cartero o cualquier otra herramienta para hacer llamadas HTTP y hacer una solicitud para PUBLICAR: http: // localhost: 4151 / pub? Topic = test
con un cuerpo JSON
/ pub es un punto final de NSQ para crear mensajes. Requiere un parámetro de consulta llamado "tema" . El tema representa un nombre del mensaje, cualquier mensaje publicado con el mismo tema será consumido por cada oyente de este tema. 📨
Si la solicitud es 200 OK, nuestro nuevo tema se creará automáticamente. Recibirá una notificación al respecto en la consola de nsqd:
[nsqd] 2019/10/21 13: 49: 04.740353 INFORMACIÓN: TEMA (prueba): creado 
[nsqd] 2019/10/21 13: 49: 04.740353 INFORMACIÓN: NSQ: metadatos persistentes de tema / canal a nsqd.dat
Otra línea dice que la información sobre el tema creado se mantuvo en un archivo de metadatos nsqd.dat.
Abra el archivo nsqd.dat en el directorio bin con cualquier editor de texto y verá sus temas allí. Pero tenemos una opción mucho mejor para ver los temas y mantenerlos. Hora de usar NSQ Admin .

5. Inicie NSQ Admin

Ahora ejecuta en shell nsqadmin:
Verás un error en la consola ❌
[nsqadmin] 2019/10/21 14: 18: 04.255018 FATAL: no se pudo crear una instancia de nsqadmin - --nsqd-http-address o --lookupd-http-address requerido
El error dice que debe proporcionar una dirección a nsqd o nsqdlookup. ¡Vamos a hacerlo!
./nsqadmin --nsqd-http-address localhost: 4151
Ahora verá un mensaje de que nsqadmin se está ejecutando:
[nsqadmin] 2019/10/21 14: 21: 41.223806 INFORMACIÓN: nsqadmin v1.2.0 (construido con go1.12.9) 
[nsqadmin] 2019/10/21 14: 21: 41.224804 INFORMACIÓN: HTTP: escuchando en [::] : 4171
Abra en el navegador esta dirección http: // localhost: 4171
Debería poder ver un tema "prueba" allí. Además, si va a la pestaña Nodos , puede ver que nuestra instancia nsqd se está ejecutando y está conectada. 👍
Si presiona la pestaña Buscar , verá una advertencia. Esto se debe a que ahora estamos conectados directamente a nsqd evitando el uso de nsqdlookup, que no es recomendado por los creadores de NSQ.
Ahora ejecute este comando con una dirección de búsqueda específica:
$ ./nsqadmin --lookupd-http-address localhost: 4161
Abra la interfaz de usuario de administración de NSQ y haga clic en la pestaña Buscar ... parece estar bien. Pero revise la pestaña Nodos nuevamente. Espera ... ¿cero nodos? ¿Por qué?
En este momento conectamos nsqadmin a nsqlookupd pero la instancia nsqd no está conectada a nada. Entonces nuestra cadena está rota 💥!
Las dependencias correctas deben ser nsqadmin -> nsqlookupd <- nsqd . Vamos a arreglarlo
Simplemente cierre la instancia nsqd y ejecútelo nuevamente especificando la dirección nsqlookupd:
./nsqd -lookupd-tcp-address localhost: 4160
Esta vez deberíamos usar la dirección TCP de lookupd, cuyo puerto es 4160.
Actualice Admin UI y todo debería funcionar nuevamente. ¡Ambas pestañas funcionan a la perfección! 

6. Crear una aplicación para el consumidor

Necesitamos tener una aplicación básica para consumir nuestros mensajes. Creemos una aplicación Node.js simple para ese objetivo.
Cree una nueva carpeta con cualquier nombre y ejecute los siguientes comandos:
npm init -y npm expreso nsqjs
Se necesita la biblioteca Express para crear un servidor http y nsqjs es una biblioteca cliente oficial proporcionada por el equipo de NSQ. enlace aquí
Crear archivo server.js
En nuestro directorio de proyectos ejecute:
Recibirá todos los mensajes en cola ahora. La consola de la aplicación del consumidor debería mostrar esto:
¡NSQ Consumer está escuchando en el puerto 3000! Mensaje recibido [0c6020dfa34cf000]: {"texto": "algún mensaje"}
Eso sucedió porque nuestro mensaje esperó en la cola hasta que se consumió.
En el administrador de NSQ, si selecciona Nodos, verá que el nuevo ClientHost está conectado ahora hace unos segundos.

7. Prueba de recepción de mensajes

Mantenga server.js en ejecución y ahora solicite a POSTMAN que publique un nuevo mensaje en el tema "prueba"
POST http: // localhost: 4151 / pub? Topic = prueba
con un cuerpo
{"texto": "CONECTADO !!! ¡SÍ!" }
Deberías verlo en una consola de inmediato. Felicidades! 🎉 Tiene un sistema de cola de mensajes en funcionamiento. 🖅 🖅 🖅
⚠️ NOTA: Si presiona Counter en NSQ Admin, verá que ahora ya no es cero.
Si envía mensajes a otros temas, no los verá porque suscribimos nuestra aplicación para el consumidor a un solo tema que es "prueba".
🚀 Si lees algo interesante de ese artículo, dale me gusta y sígueme para más publicaciones. Gracias querido codificador! 😏