java - 从 Kafka 消息中将 TraceId 注入(inject) spring sleuth

标签 java spring spring-boot trace spring-cloud-sleuth

我正在研究多个微服务架构,其中入口点来自 Kafka。 例如,假设我们有三个微服务micro1、micro2和micro3,micro1中的请求来自kafka消息队列,并通过Rest客户端进一步与micro2和micro3通信。

micro1 收到的消息包含 requestId ,我需要将其放在 spring sleuth 中的 TraceId 位置,并且应该在所有微服务中传播。

我已经通过 MDC 尝试过此操作,但在这种情况下,traceId 不会传播到其他微服务。

是否有其他方法可以在 sleuth 中实现自定义 TraceId 而不是自动生成?

谢谢!!

最佳答案

我认为这不是一个好主意。保留生成的跟踪 ID 并创建另一个生成的字段,该字段将作为行李传播。

如果您确实需要更改 ID 的生成方式,那么您必须更改此 bean

https://github.com/spring-cloud/spring-cloud-sleuth/blob/v2.0.2.RELEASE/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java#L113-L133

@Bean
    @ConditionalOnMissingBean
    Propagation.Factory sleuthPropagation(SleuthProperties sleuthProperties) {
        if (sleuthProperties.getBaggageKeys().isEmpty() && sleuthProperties.getPropagationKeys().isEmpty()) {
            return B3Propagation.FACTORY;
        }
        ExtraFieldPropagation.FactoryBuilder factoryBuilder = ExtraFieldPropagation
                .newFactoryBuilder(B3Propagation.FACTORY);
        if (!sleuthProperties.getBaggageKeys().isEmpty()) {
            factoryBuilder = factoryBuilder
                    // for HTTP
                    .addPrefixedFields("baggage-", sleuthProperties.getBaggageKeys())
                    // for messaging
                    .addPrefixedFields("baggage_", sleuthProperties.getBaggageKeys());
        }
        if (!sleuthProperties.getPropagationKeys().isEmpty()) {
            for (String key : sleuthProperties.getPropagationKeys()) {
                factoryBuilder = factoryBuilder.addField(key);
            }
        }
        return factoryBuilder.build();
    }

关于java - 从 Kafka 消息中将 TraceId 注入(inject) spring sleuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53007132/

相关文章:

java - Thymeleaf @Valid LazyInitializationException

多帐户 Web 应用程序中的 Java Spring 身份验证、授权和所有权

hibernate - 配置 Jackson 在 Spring Boot 中省略延迟加载属性

java - 为什么我安装的 Tomcat 不起作用?

Java 运算符错误

java - 无效类型文本继续打印

JAVA:文件:/tmp/guest-u9uIBd/Schreibtisch/Untitled.jar!/ressources/db_config.conf(未找到文件)

java - 无法让 JSTL 与 Spring MVC 一起使用

spring boot ant匹配器参数

java - Spring Boot : SpringApplication. 运行导致 org.springframework.context.ApplicationContextException: