我有 2 个服务 A 和 B。我正在使用 Spring 与 Spring Boot 2.1.4 的集成从 A 调用 B 中的端点。
<groupId>io.opentracing.contrib</groupId>
<artefactId>opentracing-spring-jaeger-web-starter</artefactId>
<version>3.1.1</version>
<groupId>io.opentracing.contrib</groupId>
<artefactId>opentracing-spring-cloud-starter</artefactId>
<version>0.5.5</version>
package a.b.c;
public interface AGateway{
@Gateway(requestChannel="abc", replyChannel="def")
@Payload("'''")
String hitAPIofB(@Header(value="id",required=true) String id);
}
<int:gateway id="gateway1" service-interface="a.b.c.AGateway">
<int:channel id="abc">
<int:channel id="def">
<int-http:outbound-gateway http-method="GET" url="http://host:port/apiOfB" request-channel="abc" reply-channel="def" extract-request-payload="true" expected-response-type="java.lang.String" reply-timeout="5000">
</int-http:outbound-gateway>
@RequestMapping(value="/apiOfB", method=GET)
@ResponseBody
public String apiOfB(@RequestHeader final Map<String, String> headers){
String id=headers.get("id");
return id+String.valueOf(Math.random());
}
在服务 A 日志中:
Span reported: a3d21f16b50eba4180dbe072a4749c48:acaac182f155d8f1:1519ab433e329c40:1 - receive:def
在服务 B 日志中:
Span reported : 6d58a582dc540713:6d58a582dc540713:0:1 - apiOfB
显然,traceId 在服务 B 中是不同的。
我认为正因为如此,我没有在 JaegerUi 的服务 A 跨度下看到服务 B 跨度。
知道我做错了什么吗?