我正在尝试将 Sleuth 集成到我们的系统中。如果我使用带有 注释的接口@FeignClient
,一切正常。这些接口会自动检测,Sleuth 标头会通过 REST 调用传播。
但是,我们有一些现有代码直接使用 Feign.Builder 和 Feign 注释接口(只是没有用 注释@FeignClient
)。这段代码添加了一些自定义请求拦截器、编码器、代理等。
例如:
// Feign REST interface
public interface MyService {
@RequestMapping(method = RequestMethod.GET, value = "/version")
String getVersion();
}
// Creating the builder
Feign.Builder builder = Feign.builder();
builder.requestInterceptor(new MyCustomInterceptor());
// + adding proxy, encoder, decoder, etc
// Using the builder
MyService myService = builder.target(MyService.class, "http://localhost:8080/myservice");
myService.getVersion();
我希望这个旧代码能够传播 Sleuth 标头。有什么简单的方法可以把它连接起来吗?
(我想一种选择是重新设计我们的 Feign 接口以使用 @FeignClient 并重新设计所有自定义拦截器、编码器等的应用方式,但最终这可能会带来很多风险。)
我是否需要做一个特殊的请求拦截器来手动注入这些(例如从自动装配的跟踪器)?有没有一种干净的方法(或现有的类)来做到这一点?