我最近尝试将spring-boot版本2.7.3和2.7.10升级到3.1.0。由于spring-boot v3.x.x不支持spring-cloud-sleuth,我们必须使用micrometer进行分布式跟踪。然而,traceId在两个服务中是不同的,但与sleuth相同。
我在pom.xml中添加了以下依赖项:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>context-propagation</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-observation</artifactId>
</dependency>
字符串
并将Tracer的导入更新为io. micrometer. tracing. Tracer。
当我从 Postman 向调用服务B的服务A发送请求时(使用restTemplate),在日志中我可以看到traceId是不同的。TraceId是使用以下代码提取的:
@Autowired
io.micrometer.tracing.Tracer tracer;
String traceId = tracer.currentSpan().context().traceId();
型
任何人都可以请帮助什么是我错过了traceId的是不同的.早些时候与spring-cloud-sleuth的X-B3-TraceId/ SpanId头是自动添加的,但他们没有添加微米.我需要手动添加它们,如果是这样,那么这些头的名称应该是什么?提前感谢!!
2条答案
按热度按时间2o7dmzc51#
您的traceId不同,因为跟踪信息没有传播,请检查请求头,默认情况下它应该包含W3C
traceparent
头。如果没有,您正在使用未检测的http客户端或检测被禁用。如果是这样,请使用检测的客户端/启用检测(WebClient,RestTemplate,OpenFeign等)。如果你想使用B3,你需要在你的属性中设置它,请参阅文档(如果你愿意,你可以使用多种类型):https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#application-properties.actuator.management.tracing.propagation.type
字符串
nr7wwzry2#
请检查您正在使用的RestTemplate是使用RestTemplateBuilder创建的,如下所示。
public class MyClass {
字符串
}
这是由谢尔盖Kargopolov在文章中解释:https://www.appsdeveloperblog.com/micrometer-and-zipkin-in-spring-boot/