当( Spring )应用程序调用Spring应用程序来跟踪traceID和spanID的日志时,就会出现这个问题。
URL调用->Facade(用spring集成编写,spring启动并支持Sleuth)-> Spring启动微服务(支持Sleuth支持)
微服务1: spring集成Http调用
微服务2:弹簧引导休息控制器
以下是这两个微服务日志的详细信息。
微服务1呼叫微服务2
Microserice 1 log:
2017-04-18 17:42:31.887[0;39m ] [32m信息CS正面,ff711e7b275d03a7,b3f14f1a5cf6bd1d,true0;39m [35m6280][0;39m][2m-][0;39m][2m]
微服务2日志:
[2 m2017-04-18 17:43:26.133[0;39m [32m INFO -,-false0 0;39m][35m14184][0;39m][2m--[0;39m][2 2mnio 8083-exec-10;39m] [36mc.t.cloud.resource.HelloResource ]
尽管两者都有相同的请求调用,但traceID是不同的。当这两个应用程序都是纯spring引导应用程序而没有使用http spring集成时,它的工作原理非常完美。
Microservice 1代码
<int-http:outbound-gateway id="getAccount"
url="http://localhost:8083/rest/hello/micro2"
request-channel="receiveChannel" reply-channel="publishsubscribechannel"
http-method="GET" expected-response-type="java.lang.String">
</int-http:outbound-gateway>微服务2代码
@GetMapping(value = "/micro2")
public String hello() {
LOGGER.info("Reached micro2"+accessor.getCurrentSpan());
return "HelloWorld";
}发布于 2017-04-18 08:11:15
对不起,您格式化了代码,并以这样的方式编写了文本,我几乎不明白问题是什么。如果这两个应用程序都是Spring,而且一切都很好的话?这并不奇怪,因为Sleuth是一个基于Boot的库。这意味着使用Boot和Sleuth注册所有必要的组件就足够了。在非Spring应用程序的情况下,你基本上必须自己做所有的工作。这意味着通过HTTP或消息传递跟踪头。
发布于 2019-04-11 15:37:05
到Sleuth 2.1.0为止,spring集成不会自动传播X-B3*标头。
有解决办法的https://github.com/spring-cloud/spring-cloud-sleuth/issues/1333。
https://stackoverflow.com/questions/43466858
复制相似问题