Setup
Como registrar Infra.EventBus.IbmMQ en el contenedor de IoC.¶
-
Agregar el nuget Infra.EventBus.IbmMQ al proyecto.
-
En el metodo Configure de la clase Startup, registramos el Eventbus de la siguiente manera:
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureServices((ctx, c) =>
{
c.AddIbmMQEventBus(ctx.Configuration);
});
}
public void Configure(HostBuilderContext context, IServiceCollection services)
{
// Add your services here....
services.AddIbmMQEventBus(context.Configuration);
}
Como recibir eventos desde el EventBus.¶
- Antes que nada, crear una clase que implemente la interfaz IItegrationEventHandler<T>. La misma sera la encargada de procesar los eventos una vez recibidos. El tipo
T
debe heredar deEventoDeNegocio
. Ej:
public class ConstanciaHandler: IIntegrationEventHandler<ConstanciaDeHojaDeRutaGenerada>
{
public Task Handle(ConstanciaDeHojaDeRutaGenerada @event, IConsumeContext context)
{
// Logica para procesar el mensaje aqui...
return Task.FromResult(0);
}
public Task<bool> HandleError(string @event, Exception exception)
{
return Task.FromResult(false); // false == commit, true == backout (back to the queue)
}
}
Subscribe
especificamos el tipo de evento y el tipo del handler:
public void Configure(HostBuilderContext context, IServiceCollection services)
{
// Add your services here....
services.AddIbmMQEventBus(context.Configuration)
.Subscribe<ConstanciaDeHojaDeRutaGenerada, ConstanciaHandler>();
//.Subscribe<Visita, VisitaHandler>()
//.Subscribe<EnvioEntregado, EnvioEntregadoHandler>()
}
- Agregar la configuracion del IbmMQ al archivo appsettings.json o appsettings.yml
"IbmMQ": {
"QueueManagerName": "GA02.AR.T.QM",
"Channel": "ITG.TO.GA02.TEST",
"ConnectionInfo": "192.6.6.39(1416)",
"QueueName": "QL.ITG.ALERTRAN.SUBSCRIBER.BOQ",
"Senders" : ["ALERTRAN"] // Allowed Senders (Remitentes)
}
IbmMQ:
QueueManagerName: GA02.AR.T.QM
Channel: ITG.TO.GA02.TEST
ConnectionInfo: "192.6.6.39(1416)"
QueueName: QL.ITG.ALERTRAN.SUBSCRIBER.BOQ
Senders:
- ALERTRAN // Allowed Senders (Remitentes)
Publicación de eventos¶
Para publicar un evento desde algún componente debemos agregar como dependencia del componente la interfaz IEventBus
de la siguiente manera:
private readonly IEventBus _eventBus;
public void ConstructorDeMiComponente(IEventBus eventBus)
{
_eventBus = eventBus;
}
Publish
:
public void MyMetodo()
{
var evento = new ConstruirEvento<EventoDeNegocio>()
.DesdeLaApp("REMITENTE")
.Crear();
_eventBus.Publish(evento);
}
Publish
cumple la función de Publicar el evento en el Bus o de Poner un mensaje en una queue especifica.
Por defecto todo evento creado en su propiedad destinatario
tiene el valor BROADCAST
, lo cual indica que el mensaje sera publicado en el topico especifico del evento. Si por algun motivo necesitamos poner un evento en una queue en especial, en la propiedad destinatario
deberemos colocar el nombre de la cola. Podemos setear el valor manualmente o ustilizar el metodo ConDestino
de la clase ConstruirEvento
con en el siguiente ejemplo:
public void MyMetodo()
{
var evento = new ConstruirEvento<EventoDeNegocio>()
.DesdeLaApp("REMITENTE")
.ConDestino("NOMBRE.DE.LA.COLA.DESTINO")
.Crear();
_eventBus.Publish(evento);
}
Opciones de Configuración¶
A continuación veremos un listado de la propiedades que podemos configurar:
Nombre | Tipo | Default | Requerido | Descripción |
---|---|---|---|---|
QueueManagerName | String | Null | Si | Nombre del QM |
Channel | String | Null | Si | Nombre del Canal |
ConnectionInfo | String | Null | Si | Conexión ip(puerto) |
QueueName | String | Null | No | Nombre de la cola en el caso de querer recibir mensajes |
Senders | List | Null | No | Lista de Remitentes a escuchar |
User | String | Null | No | Nombre del usuario. En el caso de que el QM necesite autenticacion |
Password | String | Null | No | Password. En el caso de que el QM necesite autenticacion |
RetryCount | Int | 3 | No | Cantidad de reintentos de envió antes de fallar |
SleepDurationBetweenRetriesInSeconds | Int | 15 | No | Duracion del corte entre mensajes cuando el CircuitBreaker esta en estado Open |