我正在从Sping Boot 2迁移到Spring Boot 3,并在迁移过程中从Spring Cloud sleuth切换到io.micrometer:micrometer-tracing-bridge-brave
。我注意到Sping Boot 2服务使用b3
头来传播span & trace ID,而新的Spring Boot 3项目使用w3c traceparent
头。
为了仍然能够通过我们自己的域 * 中的多个Sping Boot 2和Spring Boot 3服务 * 跟踪消息,我配置了域中的每个Spring Boot 3服务,使用this stackoverflow post继续使用“旧”B3格式:
@Bean
public Tracing braveTracing() {
return Tracing.newBuilder()
.propagationFactory(B3Propagation.newFactoryBuilder().injectFormat(B3Propagation.Format.SINGLE).build())
.build();
}
字符串
这是可行的,但是我宁愿让Sping Boot 3应用程序识别 * 两种 * 格式,并(如果可能的话)传播这两种格式。原因是我们域之外的应用程序期望W3C头而不是B3头。有人知道这是否可能吗?
1条答案
按热度按时间cetgtptt1#
文件说这是不可能的:
由于默认的传播格式是w3c,在Sping Boot 3.0中我们不支持多种传播类型,您应该在Sleuth & Boot 2.x应用程序中设置spring.sleuth.propagation.type=w3c,b3,以便以2种格式发布头部。一个用于当前的 Boot 2.x应用程序(b3),一个用于新的Boot 3.x应用程序(w3c)。
Spring-Cloud-Sleuth-3.1-Migration-Guide
在我们的例子中,我们在OkHttpClient上添加了一个自定义拦截器来传播这两种格式。