程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何用Feign.Builder实现侦查跟踪?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何用Feign.builder实现侦查跟踪??

开发过程中遇到如何用Feign.builder实现侦查跟踪?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何用Feign.builder实现侦查跟踪?的解决方法建议,希望对你解决如何用Feign.builder实现侦查跟踪?有所启发或帮助;

我终于弄明白了。

答案几乎在这里:https://github.com/spring-cloud/spring-cloud- sleuth/issues/594

使用Feign.builder时,其客户端需要由“跟踪”实现包装。

为此,我们只需声明一个ClIEnt bean,然后spring / sleuth将自动处理它的包装(因为Sleuth在依赖列表中)。

该声明将类似于:

@Bean
public OkhttpClIEnt okhttpClIEnt() {
    return new OkhttpClIEnt();
}

然后,我们可以在构建客户端实现时将ClIEnt Bean传递给构建器。

例如:

// autowiring the ClIEnt bean
@autowired
private ClIEnt clIEnt;

// using the ClIEnt bean to build the Feign clIEnt
DemoClIEnt demoClIEnt = Feign.builder()
        .clIEnt(clIEnt)
        .target(DemoClIEnt.class, "http://localhost:8200/demo");

完成之后,一切似乎都正常了。我可以看到跟踪ID正在传播到远程REST服务。

解决方法

我正在尝试将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并重新设计所有自定义拦截器,编码器等的应用方式,但是最终这可能会带来很多工作,但风险很大。)

我是否需要做一个特殊的请求拦截器来手动注入(例如从自动连线的示踪剂中)?有没有一种干净的方法(或现有的类)来做到这一点?

大佬总结

以上是大佬教程为你收集整理的如何用Feign.Builder实现侦查跟踪?全部内容,希望文章能够帮你解决如何用Feign.Builder实现侦查跟踪?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。