首页 > 其他分享 >springcloud 基础组件-Feign 调用流程

springcloud 基础组件-Feign 调用流程

时间:2024-03-13 10:15:33浏览次数:34  
标签:Feign http springcloud interceptors feign protocol apache 组件 org

原图来自:https://blog.csdn.net/luanlouis/article/details/82821294

所有注册的feign client

org.springframework.cloud.openfeign.FeignAutoConfiguration#feignContext

决定使用哪种client的地方

org.springframework.cloud.openfeign.FeignAutoConfiguration.OkHttpFeignConfiguration#feignClient
org.springframework.cloud.openfeign.FeignAutoConfiguration.HttpClientFeignConfiguration#feignClient
feign.Client.Default#Default

feign 所有拦截器

feign.SynchronousMethodHandler#targetRequest

  Request targetRequest(RequestTemplate template) {
    for (RequestInterceptor interceptor : requestInterceptors) {
      interceptor.apply(template);
    }
    return target.apply(template);
  }

feign feign 发送请求的地方(接口)

feign.Client#execute

默认的jdk 发送请求的地方

feign.Client.Default#execute

httpclient 发送请求的地方

org.apache.http.protocol.HttpRequestExecutor#doSendRequest

httpclient request 拦截器

org.apache.http.protocol.HttpRequestExecutor#preProcess
org.apache.http.protocol.ImmutableHttpProcessor#process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext)

    @Override
    public void process(
            final HttpResponse response,
            final HttpContext context) throws IOException, HttpException {
        for (final HttpResponseInterceptor responseInterceptor : this.responseInterceptors) {
            responseInterceptor.process(response, context);
        }
    }

httpclient response 拦截器

org.apache.http.protocol.HttpRequestExecutor#postProcess
org.apache.http.protocol.ImmutableHttpProcessor#process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext)

    @Override
    public void process(
            final HttpResponse response,
            final HttpContext context) throws IOException, HttpException {
        for (final HttpResponseInterceptor responseInterceptor : this.responseInterceptors) {
            responseInterceptor.process(response, context);
        }
    }

okhttp 发送请求的地方

okhttp3.internal.http.CallServerInterceptor#intercept

okhttp 拦截器

okhttp3.RealCall#getResponseWithInterceptorChain

  Response getResponseWithInterceptorChain() throws IOException {
    // Build a full stack of interceptors.
    List<Interceptor> interceptors = new ArrayList<>();
    interceptors.addAll(client.interceptors());
    interceptors.add(retryAndFollowUpInterceptor);
    interceptors.add(new BridgeInterceptor(client.cookieJar()));
    interceptors.add(new CacheInterceptor(client.internalCache()));
    interceptors.add(new ConnectInterceptor(client));
    if (!forWebSocket) {
      interceptors.addAll(client.networkInterceptors());
    }
    interceptors.add(new CallServerInterceptor(forWebSocket));

    Interceptor.Chain chain = new RealInterceptorChain(
        interceptors, null, null, null, 0, originalRequest);
    return chain.proceed(originalRequest);
  }

标签:Feign,http,springcloud,interceptors,feign,protocol,apache,组件,org
From: https://www.cnblogs.com/mysgk/p/17746979.html

相关文章

  • 07-ElementPlus组件库
    ElementPlus简介ElementPlus是饿了么团队研发的,基于Vue3的组件库准备工作:创建工程化的Vue项目选择TypeScript参照官方文档安装ElementPlus组件库(当前工程的目录下)npminstallelement-plus--savemain.ts中引入ElementPlus组件库参照官方文档//main.tsimpor......
  • 06-TDesign组件库
    TDesign具有统一的价值观,一致的设计语言和视觉风格,帮助用户形成连续、统一的体验认知。在此基础上,TDesign提供了开箱即用的UI组件库、设计指南和相关设计资产,以优雅高效的方式将设计和研发从重复劳动中解放出来,同时方便大家在TDesign的基础上扩展,更好的的贴近业务需求。......
  • 分布式之SpringCloud
    一、SpringCloud1、SpringCloud是什么SpringCloud是一系列框架的有序集合,这些框架为我们提供了分布式系统构建工具。2、SpringCloud包含那些项目项目项目名称服务注册于发现AlibabaNacos、NetflixEureka、ApacheZookper分布式配置中心AlibabaNacos、SpringCloudC......
  • angualr - 模块与组件
    模块@NgModule的设计意图静态的元数据(declarations)运行时的元数据(providers)组合与分组(imports和exports)《angular从零到一》说的简单些:NgModule是一个装饰器函数,它接收一个用来描述模块属性的元数据对象。其中最重要的属性是:❑declarations:声明本模块中拥有......
  • 微信小程序(五)常用组件
    text与rich-text 按钮的样式image组件的使用 ......
  • ​ iOS全局自动化代码混淆工具!支持cocoapod组件代码一并混淆
     摘要IpaGuard是一款强大的iOSipa混淆工具,能够对ipa文件进行混淆加密,保护代码、代码库和资源文件,降低代码可读性,增加破解反编译难度。本文将介绍IpaGuard的功能及界面结构,以及如何使用该工具进行代码混淆和保护。引言在iOS应用开发中,代码安全和保护至关重要。为了防止代码......
  • Vue2.x笔记:组件通信
    一、插槽slot插槽(slot)是一种Vue中组件通信的方式,主要用于父组件向子组件传递自定义内容。有三种插槽:默认插槽:最基本的插槽,没有任何标识,每个子组件只能定义一个具名插槽:具有name属性的默认插槽,每个子组件可以定义多个作用域插槽:子组件提供数据,由父组件决定其渲染方式1.默......
  • ModelSerializer组件 模型类序列化器 LL
    如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动生成一系列字段基于模型类自动为Serializer生成validators,比如unique_toget......
  • Vue 3 组件通信与 ViewDesign 最佳实践
    Vue3组件通信与ViewDesign最佳实践随着Vue3的发布,组件通信成为了前端开发中一个值得关注的话题。通过有效的组件通信方式,可以大幅提高代码的可维护性和可重用性。本文将探讨Vue3中组件通信的几种方式,并使用ViewDesign组件库中的实例加以说明。ViewDesign是一款......
  • 罐液位变化组件
    接上篇 <template><divclass="jarBox"><!--罐子整体+盖--><divclass="bar"><!--罐顶--><divclass="barBefore"></div></div><!--里面液体整体-->......