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

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.