You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

验证流程

  1. 重启两个服务,调用购物车服务的/cart接口
  2. 查看两个服务的日志,确认traceId字段是否完全一致

内容的提问来源于stack exchange,提问作者Khushal Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:10:22