在Spring RestTemplate中注入OpenTracing的SpanContext

时间:2019-10-14 21:44:51

标签: spring-boot resttemplate opentracing jaeger

我必须手动将SpanContext注入到弹簧RestTemplate中。

出于与问题无关的原因,我不能仅使用“ opentracing-spring-web-starter”,因为这将与我设置的其他启动器发生冲突,并使项目崩溃。

我找到了与将Context注入HTTP请求有关的这段代码,但找不到与RestTemplate相关的任何内容:

Tags.SPAN_KIND.set(tracer.activeSpan(), Tags.SPAN_KIND_CLIENT);
Tags.HTTP_METHOD.set(tracer.activeSpan(), "GET");
Tags.HTTP_URL.set(tracer.activeSpan(), url.toString());
tracer.inject(tracer.activeSpan().context(), Format.Builtin.HTTP_HEADERS, new RequestBuilderCarrier(requestBuilder));

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以在java-spring-web库中找到代码:

    @Override
    public ClientHttpResponse intercept(HttpRequest httpRequest, byte[] body,
                                        ClientHttpRequestExecution execution) throws IOException {
        ClientHttpResponse httpResponse;

        Span span = tracer.buildSpan(httpRequest.getMethod().toString())
                .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT)
                .start();
        tracer.inject(span.context(), Format.Builtin.HTTP_HEADERS,
                new HttpHeadersCarrier(httpRequest.getHeaders()));
        ...
    }

参考: