Zipkin未追踪完整请求链路,微服务调用显示为独立请求问题排查
分布式追踪链路断裂问题排查与解决
@LoadBalanced WebClient.Builder拦截器注入异常
Spring Cloud的@LoadBalanced会为WebClient.Builder添加负载均衡拦截器,但如果Micrometer Tracing的追踪拦截器未被正确追加到拦截器链,就会导致traceId无法传递。确保配置WebClient.Builder Bean时,不要清空默认拦截器:@Bean @LoadBalanced public WebClient.Builder webClientBuilder() { return WebClient.builder(); }避免调用
filters(f -> f.clear())这类操作,否则会删除Micrometer自动注入的追踪拦截器。依赖版本兼容性问题
检查micrometer-tracing-bridge-otel、spring-boot-starter-actuator与Spring Cloud版本是否匹配。例如Spring Boot 3.x需搭配Micrometer Tracing 1.1.x+、Spring Cloud 2022.0.x(Kilburn)系列,版本不兼容会导致自动配置失效,追踪拦截器无法注册到WebClient。追踪配置未正确启用
确保配置文件中开启追踪并设置全量采样:management: tracing: enabled: true sampling: probability: 1.0 # 全量采样便于排查同时配置OpenTelemetry的Zipkin导出:
otel: trace: exporter: zipkin zipkin: endpoint: http://your-zipkin-address:9411/api/v2/spansWebClient实例创建方式错误
必须使用注入的@LoadBalanced WebClient.Builder构建实例,不能直接调用WebClient.create(),否则追踪拦截器不会被应用:@Autowired private WebClient.Builder webClientBuilder; public void fetchInventoryInfo() { webClientBuilder.build() .get() .uri("http://inventory-service/api/inventory") .retrieve() .bodyToMono(Inventory.class) .block(); }异步线程上下文传递失效
如果调用库存服务的逻辑在自定义线程池中执行,需手动传递追踪上下文:@Autowired private Tracer tracer; public void asyncCallInventory() { Span currentSpan = tracer.currentSpan(); Executors.newSingleThreadExecutor().submit(() -> { try (SpanInScope scope = tracer.withSpan(currentSpan)) { // 此处执行库存服务调用逻辑 } }); }
内容的提问来源于stack exchange,提问作者Johnyb
相关产品推荐
相关产品推荐

