Pular para o conteúdo principal

Habilitando eventos de transação


Para ativar essa funcionalidade, defina a seguinte variável de ambiente na aplicação de transação:
RABBITMQ_TRANSACTION_EVENTS_ENABLED=true
Uma vez habilitado, o Midaz começa a publicar eventos no seguinte exchange do RabbitMQ:
transaction.transaction_events.exchange

Tipos de evento


O Midaz emite um dos seguintes tipos de evento dependendo do ciclo de vida da transação:
AçãoDescrição
APPROVEDA transação foi concluída com sucesso. Isso inclui transações de etapa única e transações de duas fases que foram confirmadas (committed).
PENDINGUma transação de duas fases foi criada e está aguardando confirmação (commit) ou cancelamento.
CANCELEDUma transação de duas fases foi cancelada antes da confirmação.

Exemplo de payload de 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"
      }
    ]
  }
}
O payload completo inclui timestamps, snapshots de saldo e outros identificadores usados para auditoria e rastreabilidade.

Modelo de roteamento de eventos


Para garantir flexibilidade e escalabilidade, o Midaz usa um topic exchange para publicar mensagens em vez de enviá-las diretamente para filas específicas. Isso significa que você controla quais eventos receber configurando seus próprios bindings.

Como o roteamento funciona

Cada evento publicado pelo Midaz é marcado com uma routingKey usando o formato:
midaz.transaction.<status>
Onde <status> corresponde ao status atual da transação (APPROVED, PENDING ou CANCELED). Para consumir eventos, sua aplicação deve:
1
Criar uma fila no RabbitMQ.
2
Vincular sua fila ao exchange do Midaz usando o padrão de routingKey que corresponde ao seu interesse.

Visão geral visual

Você pode configurar múltiplas filas com diferentes bindings para atender equipes ou serviços específicos de forma independente.

Exemplo de fila e binding


Criando uma nova fila

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

Vinculando a fila para receber todos os eventos

{
  "bindings": [
    {
      "source": "transaction.transaction_events.exchange",
      "vhost": "/",
      "destination": "new_queue_name.queue",
      "destination_type": "queue",
      "routing_key": "midaz.transaction.*"
    }
  ]
}
O Midaz não gerencia nem cria filas do RabbitMQ para você. Você é responsável por provisionar as filas e configurar os bindings corretos.