Saltar al contenido principal
Midaz introduce la publicación de eventos en tiempo real para actualizaciones transaccionales. Cuando está habilitado, cada transacción procesada emite un evento a un intercambio dedicado de RabbitMQ. Esto permite que aplicaciones externas escuchen estos eventos y los consuman a través de colas personalizadas, sin crear dependencias estrechas.

Habilitar eventos de transacción


Para activar esta función, configura la siguiente variable de entorno en la aplicación de transacciones:
RABBITMQ_TRANSACTION_EVENTS_ENABLED=true
Una vez habilitado, Midaz comienza a publicar eventos en el siguiente intercambio en RabbitMQ:
transaction.transaction_events.exchange

Tipos de eventos


Midaz emite uno de los siguientes tipos de eventos dependiendo del ciclo de vida de la transacción:
AcciónDescripción
APPROVEDLa transacción se completó exitosamente. Esto incluye transacciones de un solo paso y transacciones de dos fases que se han confirmado.
PENDINGSe creó una transacción de dos fases y está esperando confirmación o cancelación.
CANCELEDUna transacción de dos fases fue cancelada antes de la confirmación.

Ejemplo de carga útil del evento


{
  "source": "midaz",
  "eventType": "transaction",
  "action": "APPROVED",
  "timestamp": "0000-00-00T18:09:03.757330233Z",
  "version": "v3.0.0",
  "organizationId": "0198575d-f9fd-702b-bb15-fa4c980b32c7",
  "ledgerId": "0198575d-fa0b-7ac7-8b7d-9d3ab7dccafc",
  "payload": {
    "id": "0198575f-a8f9-7924-a6d7-8122f2c77ddd",
    "status": {
      "code": "APPROVED",
      "description": "APPROVED"
    },
    "amount": "1",
    "assetCode": "BRL",
    "source": ["account:1"],
    "destination": ["account:2"],
    "metadata": {
      "key": "value"
    },
    "operations": [
      {
        "type": "DEBIT",
        "amount": { "value": "1" },
        "accountAlias": "account:1"
      },
      {
        "type": "CREDIT",
        "amount": { "value": "1" },
        "accountAlias": "account:2"
      }
    ]
  }
}
La carga útil completa incluye marcas de tiempo, instantáneas de saldo y otros identificadores usados para auditoría y trazabilidad.

Modelo de enrutamiento de eventos


Para garantizar flexibilidad y escalabilidad, Midaz usa un intercambio de tipo topic para publicar mensajes en lugar de enviarlos directamente a colas específicas. Esto significa que controlas qué eventos recibir configurando tus propios enlaces.

Cómo funciona el enrutamiento

Cada evento publicado por Midaz se etiqueta con una routingKey usando el formato:
midaz.transaction.<status>
Donde <status> corresponde al estado actual de la transacción (APPROVED, PENDING o CANCELED). Para consumir eventos, tu aplicación debe:
1

Crear una cola en RabbitMQ.
2

Vincular tu cola al intercambio de Midaz usando el patrón de routingKey que coincida con tu interés.

Resumen visual

Figura 1. Representación visual del modelo de enrutamiento de eventos.

Puedes configurar múltiples colas con diferentes enlaces para servir a equipos o servicios específicos de forma independiente.

Ejemplo de cola y enlace


Crear una nueva cola

{
  "queues": [
    {
      "name": "new_queue_name.queue",
      "vhost": "/",
      "durable": true
    }
  ]
}

Vincular la cola para recibir todos los eventos

{
  "bindings": [
    {
      "source": "transaction.transaction_events.exchange",
      "vhost": "/",
      "destination": "new_queue_name.queue",
      "destination_type": "queue",
      "routing_key": "midaz.transaction.*"
    }
  ]
}
Midaz no gestiona ni crea colas de RabbitMQ por ti. Eres responsable de aprovisionar las colas y configurar los enlaces correctos.
I