Spring Cloud Sleuth 不同的跟踪 ID 与 Kafka 集成

标签 spring spring-boot spring-cloud spring-cloud-sleuth

我在微服务之间使用 Kafka 进行异步调用,我正在使用 Spring Sleuth 进行日志记录。日志没问题,但是当有消息从微服务1到微服务2时,日志的消息有不同的Trace-ID。他们不是必须具有相同的跟踪 ID 但具有不同的 SpanId 吗?有什么特别的配置吗?

最佳答案

默认情况下,消息头不会被 Spring Cloud Kafka binder 传输,您必须按照 Spring Cloud Stream Reference Guide 中的描述通过 spring.cloud.stream.kafka.binder.headers 手动设置它。然后检查那些与跟踪相关的 header 是否已正确发送。

您可以在 application.yml 中按如下方式设置 Zipkin header :

spring:
  cloud:
    stream:
      kafka:
        binder:
          headers:
            - X-B3-TraceId
            - X-B3-SpanId
            - X-B3-Sampled
            - X-B3-ParentSpanId
            - X-Span-Name
            - X-Span-Export

或者在您的 application.properties 中:
spring.cloud.stream.kafka.binder.headers[0]=X-B3-TraceId
spring.cloud.stream.kafka.binder.headers[1]=X-B3-SpanId
spring.cloud.stream.kafka.binder.headers[2]=B3-Sampled
spring.cloud.stream.kafka.binder.headers[3]=X-B3-ParentSpanId
spring.cloud.stream.kafka.binder.headers[4]=X-Span-Name
spring.cloud.stream.kafka.binder.headers[5]=X-Span-Export

或者在逗号分隔的列表中:
spring.cloud.stream.kafka.binder.headers=X-B3-TraceId,X-B3-SpanId,B3-Sampled,\
    X-B3-ParentSpanId,X-Span-Name,X-Span-Export

关于Spring Cloud Sleuth 不同的跟踪 ID 与 Kafka 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40923367/

相关文章:

java - 在 weblogic 10.3.6 上访问 spring boot application.properties

spring-boot - 在 Spring Boot 集成测试中使用 TestContainers 填充数据库

java - QueueMessageHandler 的用途是什么

spring-boot - Spring Cloud 配置 : client doesn't attempt to connect to the config server

java - 如何在Spring Hibernate中实现长时间运行的进程?

java - Spring - 连接到 hibernate 验证的错误

spring - 再次... Spring Boot/security 的方法安全性 : Error creating bean with name 'methodSecurityInterceptor' "This object has already been built"

java - 更改 Spring Boot 应用程序中对象的默认 json

spring-boot - Spring Cloud 流 'bindingService'错误

java - 使用速度模板格式化电子邮件正文?