Micrometer Tracing traceId无法传递至下游微服务求助
解决Micrometer TraceId跨微服务传递不一致的问题
核心问题分析
TraceId无法传递到下游微服务的核心原因是未给RestTemplate配置分布式追踪拦截器,导致调用下游服务时未将当前TraceId通过HTTP Header传递,下游服务会生成全新的TraceId。
具体修复步骤
1. 配置带追踪拦截器的RestTemplate
默认RestTemplate不会自动注入Micrometer Tracing的拦截逻辑,需手动配置Bean让它带上追踪拦截器:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; import io.micrometer.tracing.Tracer; import io.micrometer.tracing.annotation.EnableTracing; import org.springframework.web.client.RestTemplateCustomizer; import io.micrometer.tracing.web.client.TraceClientHttpRequestInterceptor; @Configuration @EnableTracing public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { return new RestTemplate(); } @Bean public RestTemplateCustomizer traceRestTemplateCustomizer(Tracer tracer) { return restTemplate -> { restTemplate.getInterceptors().add(new TraceClientHttpRequestInterceptor(tracer)); }; } }
2. 补全依赖并清理重复项
确保依赖包含Web客户端追踪支持,同时删除重复的spring-boot-starter-actuator依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-brave</artifactId> </dependency> <!-- 新增Web客户端追踪依赖 --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-web</artifactId> </dependency>
3. 统一两个服务的日志配置
确保购物车服务的application.properties也配置TraceId日志输出,方便对比:
logging.pattern.level=%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}] management.tracing.sampling.probability=1.0
4. 验证Header传递(可选)
在商品服务开启Web日志DEBUG级别,确认是否接收到追踪Header:
logging.level.org.springframework.web=DEBUG
验证流程
- 重启两个服务,调用购物车服务的
/cart接口 - 查看两个服务的日志,确认
traceId字段是否完全一致
内容的提问来源于stack exchange,提问作者Khushal Singh
相关产品推荐
相关产品推荐

