spring-cloud-sleuth(boot) 与 spring-集成的集成
spring-cloud-sleuth(boot) integration with spring-integration
问题发生在 Spring 集成(spring 引导)应用程序调用 Spring 引导应用程序以从中侦探记录 traceID 和 spanID。
URL 调用 --> Facade(编写在 spring 集成中,spring 引导并支持 sleuth)--> Spring 引导微服务(支持 Sleuth)
微服务1:spring集成Http调用
微服务 2:spring 启动 Rest 控制器
这是两个微服务日志的详细信息。
微服务 1 调用微服务 2
微糖 1 日志:
2017-04-18 17:42:31.887[0;39m [32m INFO [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 INFO [-,32226de675c3a463,32226de675c3a463,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>
微服务2代码
@GetMapping(value = "/micro2")
public String hello() {
LOGGER.info("Reached micro2"+accessor.getCurrentSpan());
return "HelloWorld";
}
很抱歉,您格式化代码和编写文本的方式让我几乎无法理解问题所在。如果两个应用程序都 Spring 启动并且一切正常?这并不奇怪,因为 Sleuth 是一个基于 Boot 的库。这意味着使用 Boot 和 Sleuth 注册所有必要的组件就足够了。如果是非 Spring 引导应用程序,您基本上必须自己完成所有工作。这意味着通过 HTTP 或消息传递跟踪 headers。
直到 Sleuth 2.1.0,spring-integration 不会自动传播 X-B3* headers。
https://github.com/spring-cloud/spring-cloud-sleuth/issues/1333 有解决方法。
问题发生在 Spring 集成(spring 引导)应用程序调用 Spring 引导应用程序以从中侦探记录 traceID 和 spanID。
URL 调用 --> Facade(编写在 spring 集成中,spring 引导并支持 sleuth)--> Spring 引导微服务(支持 Sleuth)
微服务1:spring集成Http调用
微服务 2:spring 启动 Rest 控制器
这是两个微服务日志的详细信息。
微服务 1 调用微服务 2
微糖 1 日志:
2017-04-18 17:42:31.887[0;39m [32m INFO [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 INFO [-,32226de675c3a463,32226de675c3a463,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>
微服务2代码
@GetMapping(value = "/micro2")
public String hello() {
LOGGER.info("Reached micro2"+accessor.getCurrentSpan());
return "HelloWorld";
}
很抱歉,您格式化代码和编写文本的方式让我几乎无法理解问题所在。如果两个应用程序都 Spring 启动并且一切正常?这并不奇怪,因为 Sleuth 是一个基于 Boot 的库。这意味着使用 Boot 和 Sleuth 注册所有必要的组件就足够了。如果是非 Spring 引导应用程序,您基本上必须自己完成所有工作。这意味着通过 HTTP 或消息传递跟踪 headers。
直到 Sleuth 2.1.0,spring-integration 不会自动传播 X-B3* headers。
https://github.com/spring-cloud/spring-cloud-sleuth/issues/1333 有解决方法。