为@FeignClient

问题描述

我正在使用以下命令运行 Spring Boot 应用程序:

  • Spring Boot 2.3.8
  • Spring Cloud Hoxton.SR10

我已声明 spring-cloud-starter-zipkinspring-cloud-starter-openfeign 依赖项,并将我的应用程序配置为指向 Zipkin 服务器。它是一个非常简单的设置和配置(我还声明了 spring-cloud-starter-netflix-ribbonspring-cloud-starter-kubernetes-all 依赖项 o 允许 Spring Feign 使用 k8s 服务发现)。

我的应用声明了一个带有 @SpringFeign 注释的接口,其中包含调用远程服务 S方法

因此,通常 zipkin 正在从我的应用中获取 span(例如传入的 REST 调用),并且 B3 标头通过 HTTP 传播到通过 feign 调用的服务 S

但是 zipkin 没有报告我的应用程序中代表对 S 的 Feign 调用的跨度。 这是应该“发生”的事情,还是我遗漏了一块拼图?

我可以例如将 @NewSpan 添加到 feign 接口方法,但这并没有为我提供请求/响应的 HTTP 详细信息作为 span 标记。如果这应该是开箱即用的,我宁愿不这样做。

解决方法

这应该是开箱即用的:https://docs.spring.io/spring-cloud-sleuth/docs/2.2.7.RELEASE/reference/html/#feign

可以看一下feign示例(需要回溯历史,目前是3.x):https://github.com/spring-cloud/spring-cloud-sleuth/tree/master/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-feign

为了查看传播是否有效,请查看传出请求,它应该包含与跟踪相关的标头。