有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java+Brave+Zipkin:问题是,跟踪总是一样的

关于生成跟踪ID的小问题,当我是客户端应用程序时,请注意HTTP请求的发起人

下面是一段非常简单的代码:

public class Question {

    public static void main(String[] args) {
        List<String> listOfManyIdentifiers = getListOfManyIdentifiersToSendToAPI();
        for (String identifier : listOfManyIdentifiers) {
            sendTheIdentifierToAnotherAPI(identifier);
        }
    }

    private static void sendTheIdentifierToAnotherAPI(String identifier) {
        final OkHttpSender        sender   = OkHttpSender.newBuilder().endpoint("https://some-zipkin.com:9411/api/v2/spans").build();
        final AsyncReporter<Span> reporter = AsyncReporter.builder(sender).build();
        final Tracing             tracing  = Tracing.newBuilder().localServiceName(UnregisterRepairServiceMain.class.getSimpleName()).addSpanHandler(ZipkinSpanHandler.create(reporter)).build();
        tracing.tracer().startScopedSpan("parentSpan");
        final var span = tracing.tracer().currentSpan();
        span.tag("key", "firstBiz");

        // Child
        tracing.tracer().startScopedSpanWithParent("childSpan", tracing.tracer().currentSpan().context());
        final var childSpan = tracing.tracer().currentSpan();
        childSpan.tag("key", "secondBiz");
        childSpan.finish();

        final WebClient           webClient                 = WebClient.create().mutate().defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE, HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE).clientConnector(new ReactorClientHttpConnector(HttpClient.create().wiretap(true).protocol(HttpProtocol.H2))).build();
        final String response = webClient.post().uri("https://some-other-api/api/v2/spans").header("X-B3-TraceId", span.context().traceIdString()).header("X-B3-SpanId", childSpan.context().traceIdString()).body(BodyInserters.fromValue(identifier)).retrieve().bodyToMono(String.class).block();
        System.out.println("This is the response " + response);
        System.out.println("Traces are always the same.");
    }

}

代码将获得一堆标识符(列表),并将它们逐个发送给第三个PRATAPI,后者将知道如何处理它们

由于我们希望能够更好地了解交互,作为客户机的我希望生成跟踪,因此我们都能够了解请求,并能够进行调试

对于上面的代码,我希望每个跟踪都会不同,因为我发送了X个不同数量的请求,我希望服务器会看到X个不同数量的跟踪

但是,我查看了服务器日志,所有跟踪都是相同的:

(来自服务器)

2021-11-03 10:25:09.421  INFO [serverservice,96233c7e509ed9bd,88ef6cfe2761a29d] 83 --- [or-http-epoll-1] c.a.p.c.v.r.controller  : I RECEIVED A NEW REQUEST WITH ID = abc
2021-11-03 10:25:09.425  INFO [serverservice,96233c7e509ed9bd,88ef6cfe2761a29d] 83 --- [or-http-epoll-1] c.a.p.c.v.r.controller  : I RECEIVED A NEW REQUEST WITH ID = def
2021-11-03 10:25:09.429  INFO [serverservice,96233c7e509ed9bd,88ef6cfe2761a29d] 83 --- [or-http-epoll-1] c.a.p.c.v.r.controller  : I RECEIVED A NEW REQUEST WITH ID = ghi
2021-11-03 10:25:09.751  INFO [serverservice,96233c7e509ed9bd,88ef6cfe2761a29d] 83 --- [or-http-epoll-4] c.a.p.c.v.r.controller  : I RECEIVED A NEW REQUEST WITH ID = jkl
2021-11-03 10:25:09.753  INFO [serverservice,96233c7e509ed9bd,88ef6cfe2761a29d] 83 --- [or-http-epoll-4] c.a.p.c.v.r.controller  : I RECEIVED A NEW REQUEST WITH ID = mno
2021-11-03 10:25:09.759  INFO [serverservice,96233c7e509ed9bd,88ef6cfe2761a29d] 83 --- [or-http-epoll-4] c.a.p.c.v.r.controller  : I RECEIVED A NEW REQUEST WITH ID = pqr

请问我做错了什么,所以每次我都会被一条相同的轨迹困住?如何解决这个问题

多谢各位


共 (0) 个答案