我正在使用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 . 不过,在我这样做之前,我想验证一些事情:

  • 当客户端未提供跟踪标头时,期望自动开始跟踪是否有效?

  • 我的驼色拉链配置是否遗漏了什么?

谢谢!