
Implementación de RabbitMQ
(Con Docker y .NET)
Selección de la imagen
Utilizaremos la imagen de docker rabbitmq:3-management
El tag 3-management en la imagen rabbitmq:3-management de Docker Hub indica que se trata de la versión 3 de RabbitMQ que incluye el plugin de administración habilitado.
Realizaremos la inclusión de la imagen en docker-compose.

Estableciendo el puerto 5672 donde nos conectaremos y el puerto 15672 por el que accederemos al panel de administración.
Así como estableciendo el resto de configuraciones.
Implementación en código
En este ejemplo llevaremos a cabo una implementación sencilla que nos de como resultado una versión ejecutable sencilla y funcional, que demuestre su funcionamiento.
Llevaremos a cabo la implementación de la clase RabbitMQService que contendrá los métodos:
- Publish: Se encargará de publicar en la cola de RabbitMq
- StartConsumer: Se encargará de leer de la cola los mensajes que se encolen.
Para llevar a cabo la configuración le pasaremos los parámetros de conexión necesarios que serán los que establecimos en el archivo docker-compose, estos serán: HostName, UserName, Password. En nuestro caso estarán el el appsettings.json

Indicando los parámetros mencionados para la conexión y especificando el nombre de la cola no conectaremos a ella, en caso de no existir creando.
Métodos
Publish
Método que publicará nuestro mensaje de texto en la cola.

Aquí podemos indicar el exchange, que en caso de no introducirlo será el default y por lo tanto routingkey será el nombre de la cola a la que nos dirigimos para encolar.
Aquí enviamos nuestro mensaje como array de bytes.
StartConsumer
Este método ejecutará la escucha de una cola

En este método de la cola que indiquemos, desencolará los mensajes que lleguen a esta y convertirá de un arreglo de bytes a texto, finalmente ejecutará el método que le indiquemos como parámetro el cual será un método que recibirá un string y realizará las acciones que considere.
Aplicación
Ejemplo realizado
Simularemos que un endpoint suspende un usuario y este debe registrarlo en un log, este log es manejado por otro microservicio y por lo tanto debe enviar el mensaje a este mediante rabbitmq para que cuando pueda lo reciba y lo procese.
Encolar mensaje
Suponiendo que tenemos un endpoint que desea comunicar la suspensión de un usuario enviando un registro log el cual otro microservicio registra en base al objeto CreateLogDto.

Crearemos el objeto que vamos a enviar como string en formato json. y lo enviaremos utilizando el método anteriormente descrito.
Tratamiento de mensajes

En esta parte tendremos una clase que se ejecutará en segundo plano y al inicio de la aplicación y ejecuta este método ExecuteAsync, que recuperará de la inyección de dependencias de los servicios necesarios y utilizando el método StartConsumer anteriormente descrito, creará la expresión lambda encargada de tratar el mensaje recibido y se lo pasará StartConsumer.
Panel de administración
Finalmente mostraremos el panel de administración donde se podrá ver información sobre los procesos que se están realizando en nuestro servicio de rabbitmq.
En este panel podremos ver información detallada de nuestro servicio de mensajería por colas
Accederemos mediante la siguiente dirección: http://localhost:15672
indicando usuario y contraseña.

En la imagen anterior podemos apreciar que disponemos de una cola, si hacemos click iremos al apartado de queues and Streams.
En la siguiente imagen podremos ver información sobre esta; podemos apreciar que la cola se llama notify y tiene información sobre esta. Esta es la cola que hemos generado por código, también podríamos crearla, así como hacer gestión de esta de forma manual desde este panel de administración.

No comment yet, add your voice below!