Nesse artigo não vou trazer uma implementação via código do Trace Id, mas o como implementar vai estar ligado a ideia de o que você precisa saber para implementar.
Um Trace Id é um Id único que percorre todas as etapas de uma requisição em microsserviços, devendo passar por todos os microsserviços compondo seu log. O Objetivo: Se der um erro, precisamos saber o fluxo completo da requisição para ajudar a identificar a causa raiz, os impactos e se os fluxos de rollback relacionados ao erro deram certo (no caso de um SAGA por exemplo, embora o SAGA tenha o SAGA ID), entre outras coisas. Qual a mensagem origem? Como eram seus dados? Sempre que perguntarmos por algo o Trace Id vai estar relacionado com essa pergunta.
Para manter o fluxo do Trace Id você vai ter que:
- Usar filtros para pegá-lo assim que receber a requisição web em todas as APIs;
- Usar Interceptors para colocá-lo antes de enviar chamadas de uma API para outra;
- Usar interceptors para o Kafka para colocá-lo no header do producer (ou alguma forma manual) andes de enviar
- Pegar no @Listener do Kafka para setar no projeto
- Salvar em bancos que guardam estado (bancos que salvam dados em seus estágios intermediários entre o processamento(Outbox Pattern ou outros)
- Salvar em tabelas de auditoria (dependendo do caso)
- Usar em logs
- Chamada Assíncronas
- Startar outras threads
- WebFlux
- Kafka Consumer