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

Spring Boot 2与3跨应用追踪:兼容B3和W3C格式方案问询

实现Spring Boot 3同时支持B3和W3C链路追踪头格式

完全可行,Brave(Micrometer Tracing默认实现)支持通过组合传播工厂的方式,同时识别并处理B3和W3C traceparent两种格式的链路追踪头,完美适配内部Spring Boot 2服务与外部W3C兼容应用的需求。

核心配置方案

通过PropagationFactory.composite()将B3和W3C的传播工厂组合,实现:

  • 提取(解析请求头):优先尝试B3格式,若不存在则解析W3C traceparent,确保两种格式的请求都能被正确追踪
  • 注入(生成请求/响应头):默认使用B3格式(保持与内部Spring Boot 2服务的兼容),也可配置同时注入两种格式适配外部应用

基础配置(识别两种格式,内部传播用B3)

替换你现有的Tracing Bean,改用组合传播工厂:

import brave.Tracing;
import brave.propagation.B3Propagation;
import brave.propagation.PropagationFactory;
import brave.propagation.W3CTraceContextPropagation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TracingConfiguration {

    @Bean
    public Tracing braveTracing() {
        // 配置B3单头格式的传播工厂(与Spring Boot 2 Sleuth保持一致)
        PropagationFactory b3PropagationFactory = B3Propagation.newFactoryBuilder()
                .injectFormat(B3Propagation.Format.SINGLE)
                .build();

        // W3C traceparent标准传播工厂
        PropagationFactory w3cPropagationFactory = W3CTraceContextPropagation.FACTORY;

        // 组合两种传播工厂:提取时依次尝试B3 → W3C,注入时使用第一个有效的(B3)
        PropagationFactory compositeFactory = PropagationFactory.composite(b3PropagationFactory, w3cPropagationFactory);

        return Tracing.newBuilder()
                .propagationFactory(compositeFactory)
                .build();
    }
}

进阶配置(同时注入B3和W3C两种格式)

如果需要服务发出请求时同时携带两种格式的头(既兼容内部Spring Boot 2,又支持外部W3C应用),可以通过Propagation.multi()配置多格式注入:

import brave.Tracing;
import brave.propagation.B3Propagation;
import brave.propagation.Propagation;
import brave.propagation.PropagationFactory;
import brave.propagation.W3CTraceContextPropagation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TracingConfiguration {

    @Bean
    public Tracing braveTracing() {
        // 定义B3和W3C的传播实现
        Propagation<String> b3Propagation = B3Propagation.newFactoryBuilder()
                .injectFormat(B3Propagation.Format.SINGLE)
                .build()
                .create(Propagation.KeyFactory.STRING);

        Propagation<String> w3cPropagation = W3CTraceContextPropagation.FACTORY.create(Propagation.KeyFactory.STRING);

        // 配置同时注入两种格式的传播
        Propagation<String> multiPropagation = Propagation.multi(b3Propagation, w3cPropagation);

        // 组合传播工厂,强制使用多格式注入
        PropagationFactory compositeFactory = PropagationFactory.composite(
                B3Propagation.newFactoryBuilder().injectFormat(B3Propagation.Format.SINGLE).build(),
                W3CTraceContextPropagation.FACTORY
        ) {
            @Override
            public <K> Propagation<K> create(Propagation.KeyFactory<K> keyFactory) {
                // 强制返回多格式传播实例
                return (Propagation<K>) multiPropagation;
            }
        };

        return Tracing.newBuilder()
                .propagationFactory(compositeFactory)
                .build();
    }
}

依赖说明

确保项目中已引入正确的Micrometer Tracing Brave桥接依赖:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter-brave</artifactId>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:47:39