在 Opentelemetry 中,无法获得父级跨度

问题描述

我是 OpenTelemetry 这个词的新手。我已经分别为我的服务创建了跨度,但是当我尝试使用上下文传播来组合两个不同服务的跨度时,我无法成功。 我使用了以下代码

 // at client side:
  public static void sendContext(String resource) {

TextMapSetter<HttpURLConnection> setter =
    new TextMapSetter<HttpURLConnection>() {
      @Override
      public void set(HttpURLConnection carrier,String key,String value) {
        carrier.setRequestProperty(key,value);
      }
    };
HttpURLConnection transportLayer = null;
String urlString = "http://127.0.0.1:8080" + resource;
try {
  URL url = new URL(urlString);
  transportLayer = (HttpURLConnection) url.openConnection();
} catch (MalformedURLException ex) {
  System.out.println(ex.getMessage());
} catch (IOException e) {
  System.out.println(e.getMessage());
}
GlobalOpenTelemetry.getPropagators()
    .getTextMapPropagator()
    .inject(Context.current(),transportLayer,setter);
}



// at server side:
public static Context getContext(HttpServletRequest request) {

TextMapGetter<HttpServletRequest> getter =
    new TextMapGetter<HttpServletRequest>() {
      @Override
      public String get(HttpServletRequest carrier,String key) {
        Enumeration<String> headerNames = carrier.getHeaderNames();
        if (headerNames != null) {
          while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            System.out.println("headerNames.nextElement(): " + headerName);
            if (headerName.equals(key)) {
              String headerValue = request.getHeader(headerName);
              System.out.println("headerValue): " + headerValue);
              return headerValue;
            }
          }
        }

        return null;
      }

      @Override
      public Iterable<String> keys(HttpServletRequest carrier) {
        Set<String> set = new HashSet<String>();
        Enumeration<String> headerNames = carrier.getHeaderNames();
        if (headerNames != null) {
          while (headerNames.hasMoreElements()) {
            set.add(headerNames.nextElement());
          }
        }
        return set;
      }
    };
Context extractedContext =
    GlobalOpenTelemetry.getPropagators()
        .getTextMapPropagator()
        .extract(Context.current(),request,getter);

在服务器上,我无法获得父级跨度。 请对此提供帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)