Saltar al contenido

Comunicación de microservicios: Rabbitmq y Asp.net core – Cool Coders

Al crear microservicios, es muy importante tener en cuenta qué mecanismo de mensajería utiliza. Hay varias formas en las que los microservicios se comunican utilizando diferentes protocolos de mensajería. Hoy nos centraremos en el protocolo de mensajería AMQP con rabbitmq y asp.net core.

¿Qué es Rabbitmq?

Rabbitmq es un sistema de mensajería que permite que sus aplicaciones se comuniquen juntas mediante mensajes y colas. Rabbitmq utiliza el protocolo de mensajería AMQP (Advanced Message Queue Server Protocol). Es de código abierto y muy robusto. Rabbitmq está escrito en Erlang, un lenguaje de programación funcional creado para sistemas de telecomunicaciones por Ericsson. Erlang es un lenguaje de programación concurrente con varias otras características que le permiten ser una opción ideal para construir sistemas de mensajería altamente robustos y resistentes.

Cómo funciona Rabbitmq

Como mencionamos anteriormente, Rabbitmq implementa el protocolo AMQP. Aquí hay una breve descripción de cómo se envían los mensajes a través de rabbitmq. Una aplicación dispuesta a enviar mensajes (Productor) a otra aplicación, lo hace a través de un corredor (Rabbitmq). El corredor luego recibe el mensaje a través de un Intercambio que luego es responsable de enrutar ese mensaje a los Colas utilizando claves de enrutamiento y reglas llamadas enlaces. Luego, el mensaje es recibido por otra aplicación que se suscribe a la cola dada (Consumidor). Puede obtener más información sobre este proceso aquí.

Se pueden configurar algunos otros atributos de este proceso de comunicación, como enviar acuses de recibo cuando se recibe un mensaje, mantener una cola en una base de datos, etc. Hay varios tipos de intercambios en Rabbitmq y cada uno determina la forma en que su mensaje se enruta a las colas correspondientes.

Rabbitmq y ASP.net Core

Aunque rabbitmq parece un poco complicado al principio, hay bibliotecas increíbles que abstraen todas estas nociones de AMQP y hacen que sea más fácil de usar al construir sus microservicios centrales de ASP.net. Usaremos una de estas bibliotecas (Tránsito masivo).

Instalación de Rabbitmq

Es fácil de instalar rabbitmq, puede descargarlo directamente desde su sitio web e instalarlo en su sistema operativo. O podría usar un contenedor de ventana acoplable. Usaremos el enfoque posterior. El nombre de la imagen es:

Aquí está el comando para ejecutar rabbitmq en la ventana acoplable. Puede configurar la contraseña y el nombre de usuario a su gusto.

estibador correr D t eso nombre de host miconejomq nombre conejomq3servidor pag 15672:15672 pag 5672:5672 mi RABBITMQ_DEFAULT_USER=usuario mi RABBITMQ_DEFAULT_PASS=contraseña mi RABBITMQ_DEFAULT_VHOST=mi_vhost conejomq:3administración

Que vamos a construir

Para demostrar la comunicación de microservicios, crearemos dos API de descanso simples que se comunicarán entre sí. Uno será el servicio a los usuarios y el otro será el servicio a las empresas. El servicio de usuarios recibirá llamadas API para suscribirse a empresas específicas. Una vez que recibe una llamada, le dice asincrónicamente al servicio de la empresa que agregue al usuario a la lista de suscriptores en la empresa especificada. “Mando”. A partir de entonces, el servicio de la empresa transmite un mensaje que indica que el proceso de suscripción ha terminado. “Evento”. Todo esto a través de rabbitmq y asp.net core.

Masstransit y su capa de abstracción Rabbitmq

Rabbitmq tiene una biblioteca que nos permite comunicarnos de forma cruda. Usando las nociones de colas e intercambios, escuchando mensajes con bucles y todo eso. Aunque podemos usar esto perfectamente cuando nos comunicamos entre nuestros microservicios, requerirá mucho trabajo, y ¿qué pasa si en el futuro queremos cambiar el sistema de mensajería de Rabbitmq a Servicebus o algo más? ¿Y si queremos hacer las cosas de forma limpia y sostenible?

Masstransit es una biblioteca que proporciona una buena capa de abstracción por encima de rabbitmq y otras herramientas de mensajería. Cambiar de rabbitmq a otra herramienta será solo una cuestión de cambiar las configuraciones.

Los mensajes se envían usando Eventos y Comandos. Un comando es un mensaje enviado a un punto final específico. Y se envían eventos a quien quiera que esté suscrito a ellos. Para recibir un mensaje, debe suscribir a un consumidor, esto procesa el mensaje. Cuando se envía un mensaje con masstransit a través de rabbitmq, se envía a un intercambio con el nombre correspondiente al tipo de clase del mensaje. Los mensajes enviados contienen metadatos sobre el mensaje.

Si te gusta esta publicación, no dudes en seguirme en Twitter o Github y suscribirte a las notificaciones de esta página. para mantenerse actualizado con nuevos artículos o me gusta mi página en Facebook.

Vamos a codificar

Se encuentra el código fuente de esta publicación. aquí.

Primero, necesitamos agregar el transporte público a nuestros servicios. El siguiente código no solo inicializará las configuraciones para rabbitmq y masstransit, sino que también configurará a nuestros consumidores e iniciará el servicio de autobús.

var Puerto = Convertir.ToUInt16(configSections[“Port”]);

var autobús = Autobús.Fábrica.CreateUsingRabbitMq(cfg =>

cfg.Anfitrión(anfitrión, Puerto, anfitrión virtual, anfitrión =>

cfg.Recibir punto final(configSections[“Endpoint”], ep =>

ep.PrefetchCount = Convertir.ToUInt16(configSections[“PrefetchCount”]);

regreso autobús;

servicios.ConfigurarHealthCheckPublisherOptions>(opciones =>

opciones.Demora = Espacio de tiempo.FromSeconds(2);

opciones.Predicado = (cheque) => cheque.Etiquetas.Contiene(“Listo”);

servicios.AddMassTransitHostedService();

Como se mencionó anteriormente, enviaremos mensajes a través de eventos / comandos. Estas son clases simples que contienen los datos que queremos enviar.

Usamos solo comunicación asincrónica aquí. Los comandos se envían apuntando a puntos finales específicos como se muestra a continuación.

público asincrónico Tarea Enviar mensajeT>(T mensaje, cuerda targetEndPoint)

var punto final = PS“Rabbitmq: // {_rabbitConfig.Host}: {_rabbitConfig.Port} / {targetEndPoint}? Durable = {_rabbitConfig.DurableQueue}”;

var finalEndpoint = esperar _sendEndpoint.GetSendEndpoint(nuevo Uri(punto final));

esperar finalEndpoint.Enviar(mensaje);

Como puede ver arriba, puede configurar una opción (? duradero =) especificando si desea que Rabbitmq persista en una cola. Tenga en cuenta que, un punto final para que persista los mensajes que recibe.

El envío de eventos no requiere que especifique ningún punto final. Simplemente publícalo para quien quiera escucharlo. Como se muestra abajo:

ID de la compañía = contexto.Mensaje.ID de la compañía,

UserId = contexto.Mensaje.UserId

Ahora recibir mensajes es igual de fácil. Solo necesita crear un consumidor para el mensaje específico que está dispuesto a recibir y registrarlo como podemos ver arriba en la clase de inicio. Puedes ver a continuación.

público SubscribeToCompanyConsumer(IOpcionesConejomqConfig> rabbitConfig,

_Tienda = Tienda;

público Tarea Consumir(ConsumeContextSubscribeToCompanyCommand> contexto)

var empresa = _Tienda.Compañías.SingleOrDefault(C => C.Identificación == contexto.Mensaje.ID de la compañía);

Arriba tenemos una guía de inicio rápido para implementar la comunicación de microservicios con rabbitmq y asp.net core y masstransit. Puede obtener el código fuente desde aquí. Puede que le interese este artículo sobre la configuración del cuerpo del formulario opcional en la API web principal de asp.net.

Sígueme en las redes sociales y mantente actualizado

Comparte esta publicación en:

Este contenido se publicó originalmente aquí.