Spring Boot 3向Spring Boot 2调用时TraceId无法传递问题求助
问题:Spring Boot 3与Spring Boot 2 Sleuth TraceId无法同步
将应用迁移至Spring Boot 3.2.6并引入Micrometer Tracing相关依赖后,调用基于Spring Boot 2.6.14(使用Sleuth)的API时,TraceId无法在两个应用间同步。
环境配置
Spring Boot 3.2.6 POM依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-brave</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
Spring Boot 3.2.6 YAML配置
management: tracing: propagation: type: b3 sampling: probability: 1.0
Spring Boot 2.6.14 POM依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>provided</scope> </dependency> </dependencies>
双方日志格式
logging.pattern.level=%5p [traceId=%X{traceId}, spanId=%X{spanId}]
已尝试的无效配置
spring.sleuth.traceId128=true spring.sleuth.supportsJoin=false spring.sleuth.propagation.type=W3C,B3
可行解决方案
调整Spring Boot 3的B3传播格式:Sleuth默认使用B3多header模式(
X-B3-TraceId、X-B3-SpanId等),而Micrometer Tracing结合Brave默认可能使用单header模式。需在Spring Boot 3的YAML中添加:management: tracing: brave: propagation: type: B3_MULTI统一Spring Boot 2的传播配置:移除W3C传播类型,仅保留B3,并强制启用128位TraceId(匹配Spring Boot 3默认行为),修改Spring Boot 2的配置:
spring.sleuth.traceId128=true spring.sleuth.propagation.type=B3 spring.sleuth.supportsJoin=false验证请求头:确保Spring Boot 3发起的请求携带
X-B3-TraceId(128位)、X-B3-SpanId、X-B3-Sampled这几个请求头,而非单条b3头。检查依赖兼容性:确认Spring Boot 3的
micrometer-tracing-bridge-brave版本与Spring Boot 3.2.6兼容(Spring Boot 3.2.x对应Micrometer Tracing 1.1.x,Brave 5.14.x,无需额外指定版本,由Spring Boot管理即可)。
内容的提问来源于stack exchange,提问作者Atul Rai
相关产品推荐
相关产品推荐

