Pular para o conteúdo

apps/messaging-streaming/message-history

065 · Comunicação & Mensageria · ≈ 6 min de estudo

Message History

Cada mensagem carrega, dentro do próprio envelope, um registro cumulativo (breadcrumb trail) de todos os componentes por onde já passou — sem depender de um sistema de tracing externo. O histórico viaja com a mensagem, e o caminho completo é reconstruído lendo só a mensagem final.

passos
6
arquivos
7
teste
1
tecnologias
5
Infraestrutura realTypeScriptBunElysiaRabbitMQDocker
Baixar cartão

Cenário

Uma fintech aprova crédito num pipeline de três serviços: KYC, score e compliance. Em vez de cruzar logs ou montar um backend de tracing para saber por onde uma proposta passou, cada serviço acrescenta sua entrada — serviço, horário e o que fez — ao próprio envelope antes de repassá-lo. A mensagem final responde sozinha por onde a proposta passou e quanto tempo levou cada etapa.

Planta

Sequência
4/4
envelope com history de 1 entrada1envelope com history de 2 entradas2envelope com history de 3 entradas e creditScore3envelope final com history de 4 entradas e status4caminho e latência entre estágios lidos só da mensagem finalcredit-apikyc-servicescore-servicecompliance-servicefila credit-decided
4

4 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Mensagem carrega por onde passou.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    A API interna cria o envelope com a primeira entrada em history e publica na exchange credit.pipeline, com confirmação do broker

  2. 02

    Cada estágio consome sua fila, faz sua parte e acrescenta só a própria entrada ao fim de history — as anteriores seguem intactas

  3. 03

    O envelope inteiro, histórico incluído, é publicado para o próximo estágio antes do ack do que foi consumido

  4. 04

    receivedAt em ISO 8601: a latência entre estágios sai da própria mensagem (historyHops)

  5. 05

    Envelope ilegível ou sem history vai para a DLQ em vez de seguir sem rastro

  6. 06

    Nenhuma rota devolve o histórico ao cliente: ele revela a arquitetura interna e é dado de auditoria operacional

apps/messaging-streaming/message-history

7 arquivos

src/

  • topology_credit.tsExchange, filas por estágio com DLX, envelope, historyAppend append-only e historyHops
  • stage_credit.tsOs três estágios: consomem, trabalham, acrescentam a entrada e repassam o envelope inteiro
  • api_credit.tsAPI interna Elysia que abre o envelope e o entrega ao pipeline
  • config_credit.tsVariáveis de ambiente validadas no boot
  • stage_credit.test.tstesteIntegração com RabbitMQ real: trilha completa em ordem, entradas anteriores intactas, limite do score e envelope sem histórico na DLQ
  • demo.tsdemoSobe API e estágios como processos e imprime trilha e latências de duas propostas

./

  • docker.shinfraSobe o RabbitMQ 3 na porta 5672

Executar · com Docker

  1. ./docker.sh up# sobe RabbitMQ
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real
  6. bun run api
  7. bun run stage kyc
  8. bun run stage score
  9. bun run stage compliance
  10. curl -X POST localhost:8119/credit-applications -H "Content-Type: application/json" -d '{"applicantId":"CUST-042","amountCents":1500000}'

Cada papel também roda isolado:

Requisitos
BunDocker
Sobe junto
RabbitMQ

Por que se relacionam

Message History × Distributed Tracing

Aspecto Message History Distributed Tracing
Onde vive o rastro Na própria mensagem Backend de spans (Jaeger)
Consulta do caminho Ler a mensagem final Consultar o backend por trace id
Dependência externa Nenhuma Collector e storage
Custo Payload cresce a cada estágio Carga na observabilidade
Quando Poucos estágios, auditoria por mensagem Muitos estágios, latência agregada

Teste rápido

Qual destes combina com Message History?

Próximo projeto · Comunicação & MensageriaWire Tap
Esc

↑ ↓ navegarEnter abrir191 resultados