spring cloud sleuth(boot)与spring集成的集成

spring cloud sleuth(boot)与spring集成的集成,spring,spring-cloud-sleuth,Spring,Spring Cloud Sleuth,当Spring集成(Spring boot)应用程序调用Spring boot应用程序以从中对traceID和spanID进行搜索记录时,就会出现问题 URL调用-->Facade(用spring集成、spring引导和支持sleuth编写)-->spring引导微服务(支持sleuth) 微服务1:spring集成Http调用 微服务2:弹簧引导休息控制器 下面是两个微服务的日志的详细信息 微服务1调用微服务2 Microserice 1日志: 2017-04-18 17:42:31.887[

当Spring集成(Spring boot)应用程序调用Spring boot应用程序以从中对traceID和spanID进行搜索记录时,就会出现问题

URL调用-->Facade(用spring集成、spring引导和支持sleuth编写)-->spring引导微服务(支持sleuth)

微服务1:spring集成Http调用

微服务2:弹簧引导休息控制器

下面是两个微服务的日志的详细信息

微服务1调用微服务2

Microserice 1日志:

2017-04-18 17:42:31.887[0;39m[32m信息[CS Facade,ff711e7b275d03a7,b3f14f1a5cf6bd1d,true][0;39m[35m6280[0;39m[2m-[0;39m[2m[

微服务2日志:

[2m2017-04-18 17:43:26.133[0;39m[32m信息[-,3226DE675C3A463,3226DE675C3A463,false][0;39m[35m14184[0;39m[2m-[0;39m[2m-[nio-8083-exec-1][0;39m[36mc.t.cloud.resource.HelloResource]

虽然两者都有相同的请求调用,但traceID是不同的。 当两个应用程序都是纯spring引导应用程序且未使用http spring集成时,它工作得非常完美

微服务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>
@GetMapping(value = "/micro2")
public String hello() {

    LOGGER.info("Reached micro2"+accessor.getCurrentSpan());
    return "HelloWorld";
}

很抱歉,您格式化代码并编写文本的方式让我几乎无法理解问题所在。如果两个应用程序都是Spring Boot,并且一切正常?这并不奇怪,因为Sleuth是基于引导的库。这意味着使用引导就足够了,并且Sleuth注册了所有必要的组件。如果是非Spring Boot app您基本上必须自己完成所有工作。这意味着通过HTTP或消息传递跟踪头。

直到Sleuth 2.1.0,spring integration不会自动传播X-B3*头


解决方法。

欢迎来到SO。您的问题是什么?更新了问题。thxApologize,我已经更新了问题。是的,如果没有spring integration http出站调用,一切正常。但是,通常在微服务体系结构中,像spring integration这样的EAI框架在门面级别使用。我可以看到当我使用通道拦截器记录通道时,eader有traceID、spanID和URL信息,但它没有传递给第二个微服务。我正在使用spring boot和spring integration for facade微服务。我将对http头进行一些研究。添加了映射请求头=“http_requestUrl,X-B3-traceID,X-B3-spanID,X-Span-Name”在http和amqp头中。它工作得很好。谢谢。