Pular para o conteúdo principal

Message History

Descrição​

O Message History anexa à própria mensagem a lista dos componentes pelos quais ela passou desde a origem. Cada componente, inclusive o originador, acrescenta uma entrada à lista, normalmente com identificação e, se útil, horário.

A lista fica no cabeçalho, separada do payload de negócio, mantendo dados de controle do sistema fora dos dados da aplicação. Isso devolve parte da visibilidade que o acoplamento fraco da mensageria esconde: o receptor passa a saber de onde a mensagem veio e por onde andou.

Problemas que resolve​

  • Em mensageria, o receptor normalmente não sabe quem enviou a mensagem nem por quais etapas ela passou, o que dificulta depurar.
  • Avaliar o impacto de mudar um formato de mensagem, descobrindo quais aplicações o produzem.
  • Rastrear mensagens agregadas, que combinam várias entradas, cada uma com seu próprio histórico.

Quando usar​

  • Fluxos com muitos componentes intermediários em que o caminho real da mensagem é difícil de determinar.
  • Depuração e análise de impacto em soluções com acoplamento fraco.
  • Quando se quer rastreabilidade sem consultar um repositório externo.

Quando evitar​

  • Quando o histórico revelaria topologia interna a destinatários externos.
  • Quando as mensagens são muito pequenas e o cabeçalho crescente pesaria no tráfego.
  • Se já existe tracing distribuído que cobre a necessidade com um sistema dedicado.

Trade-offs​

GanhoCusto / Risco
Rastreio do caminho embutido na mensagemO cabeçalho cresce a cada etapa
Dados de controle separados do payloadTodos os componentes precisam respeitar a convenção
Útil para depuração e análise de impactoPode expor detalhes internos da arquitetura
  • Em agregações, é preciso decidir entre guardar uma árvore com o histórico de cada entrada ou só o da mensagem principal.
  • O histórico não substitui um armazenamento persistente; se a mensagem se perde, o rastro também.

Diagrama​

A cada componente a mensagem ganha uma entrada no histórico, de modo que o destino conhece todo o caminho percorrido.

Padrões relacionados​

  • Message Store — guarda os dados das mensagens em um local central.
  • Wire Tap — outra forma de observar o tráfego.
  • Control Bus — usado para gerenciar os componentes que mantêm o histórico.
  • Correlation Identifier — liga mensagens relacionadas, enquanto o histórico mostra o caminho.
  • Distributed Tracing — abordagem equivalente em microservices, com spans coletados externamente.

Referência​