1

我有 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 跨度。

知道我做错了什么吗?

4

0 回答 0