0

我正在使用 camel-zipkin 组件来跟踪在两个不同服务之间流动的请求:

service-a:在 Spring Boot 上运行的 Camel 应用程序,充当简单的 HTTP 代理(出于此概念证明的目的)。camel-zipkin 模块提供的 Zipkin 支持。路线:

    from("servlet:service-a?matchOnUriPrefix=true")
      .routeId("service-a-to-b")
      .delay(2000)
      .to("http://service-b?bridgeEndpoint=true");

service-b:带有 REST 控制器的 Spring Boot 应用程序。Spring Cloud 的 spring-cloud-starter-kubernetes-zipkin 模块提供的 Zipkin 支持。


当我向 service-a 发出请求时,我在 Zipkin 中看到了部分跟踪:我看到了来自 service-a 的客户端请求,我看到了 service-b 中的服务器请求,以及我在那里添加的 span检测请求路径的各个部分。但是,我没有看到来自 Camel 部分的服务器请求,包括我在路由中设置的延迟导致的额外两秒。

跟踪camel-zipkin代码,我意识到只有在已经有跟踪ID标头的情况下才会跟踪服务器请求,因为这行: https ://github.com/apache/camel/blob/c6c02ff92a536e78f7ed1b9dd550d6531e852cee/components /camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java#L753

有了这些知识,如果我手动提供自己的跟踪标头(X-B3-TraceId、X-B3-Sampled 和 X-B3-SpanId),我就能够按预期获得整个跟踪。但是,即使客户端没有指定跟踪,我也希望能够开始跟踪。

根据我对 camel-zipkin 代码的阅读,我认为我可以创建一个 PR 来引发我想要的行为。不过,在此之前,我想验证几件事:

  1. 当客户端未提供跟踪标头时,期望自动开始跟踪是否有效?
  2. 我的 camel-zipkin 配置是否遗漏了什么?

谢谢!

4

0 回答 0