Skip to content

Infra.EventBus.IbmMQ >= 0.5.0

Como registrar Infra.EventBus.IbmMQ en el contenedor de IoC.

  1. Agregar el nuget Infra.EventBus.IbmMQ al proyecto.
  2. Agregar el siguiente Using
    using Infra.EventBus.IbmMQ.DependencyInjection;
    
  3. 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.

  1. 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 de EventoDeNegocio. Ej:

 public class ConstanciaHandler: IIntegrationEventHandler<ConstanciaDeHojaDeRutaGenerada>
 {
   public Task Handle(ConstanciaDeHojaDeRutaGenerada @event) 
   {
     // 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)
   }
 }
2. Registrar el handler dentro del contenedor de IoC. Para registrar los handlers usamos el método Subscribe de le siguiente manera. También podemos subscribir a varios eventos llamando varias veces al método Subscribe. En el metodo 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>()
    }
  1. 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;
}
Luego desde cualquier metodo de mi componente llamamos al metodo Publish:

public void MyMetodo()
{
   var evento = new ConstruirEvento<EventoDeNegocio>()
                .DesdeLaApp("REMITENTE")
                .Crear();
   _eventBus.Publish(evento);
}
El metodo 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
ShowNoMessageAvailableWarning Bool false No Muestra o no un warning a no encontrar mensajes en al cola
WaitMessageIntervalInSeconds Int 15 No Tiempo de espera para la obtener mensajes