FeignClient原理解读

article/2025/9/2 10:07:00

FeignClient原理解读

  • 简介
  • 源码解读
    • feign负载ribbon源码解读
      • eurake的ribbon原理是:
      • 调度原理:
  • 笔记
  • 参考文献

简介

这一章节主要介绍feignClient的地址如何来,如何从feign Server注册中心寻址和调用。

源码解读

在解读源码之前,建议大家要了解一下RPC调度原理以及什么是负载均衡和微服务设计,我这里借用thinkinjava的一个图解析howtodoinjava,若图片有版权问题,请联系我删除!
图片来源若有问题,请链接我删除
feign寻址主要是spring boot的自动配置类org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration,这里简介总体流程图

feign负载ribbon源码解读

在这里插入图片描述

eurake的ribbon原理是:

1、初始化工程,决定是否走负载均衡

ribbon: eureka:enabled: false
[servicename]:ribbon: listOfServers: [ip]:[port]

2、定时任务线程下拉服务器信息DiscoveryClient
3、判断是否需要更新本地共享线程变量DiscoveryClient#remoteRegionVsApps&DiscoveryClient#fetchRegistry

调度原理:

1、动态代理LoadBalancerFeignClient
2、选择调用地址BaseLoadBalancer#chooseServer
3、负载均衡策略决定PredicateBasedRule#choose
4、多线程远程调度
AbstractLoadBalancerAwareClient#executeWithLoadBalancer
5、动态代理调用返回FeignInvocationHandler#invoke

笔记

org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration配置信息
# 不能用yaml格式设置
ribbon.eureka.enabled: false 配置选项 ServerList<T>接口服务器列表实现方式配置类入口:com.netflix.client.config.DefaultClientConfigImpl#loadProperties
接着加载com.netflix.client.config.DefaultClientConfigImpl#loadDefaultValues初始化给定的默认值com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList 动态服务器地址
org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList#getUpdatedListOfServers获取地址
com.netflix.loadbalancer.DynamicServerListLoadBalancer#initWithNiwsConfig 负载均衡获取
com.netflix.loadbalancer.DynamicServerListLoadBalancer#updateListOfServers 更新
com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList#eurekaClientProvider
com.netflix.discovery.DiscoveryClient#initScheduledTasks 初始化线程
com.netflix.discovery.DiscoveryClient.CacheRefreshThread 更新线程
com.netflix.discovery.DiscoveryClient#fetchRegistry是否全局更新
com.netflix.discovery.DiscoveryClient#remoteRegionVsApps&DiscoveryClient#fetchRegistry
com.netflix.discovery.DiscoveryClient#getAndUpdateDelta 捕获更新
com.netflix.discovery.DiscoveryClient#getAndStoreFullRegistry 启动一次性注册全部
com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient#execute 获取请求体clientFactory.newClient(currentEndpoint)
com.netflix.discovery.shared.transport.jersey.JerseyApplicationClient 获取请求体
com.sun.jersey.client.apache4.ApacheHttpClient4 原始请求类com.netflix.loadbalancer.ConfigurationBasedServerList#getUpdatedListOfServers  本地指定服务器地址,由org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration#ribbonServerList配置
com.netflix.loadbalancer.ConfigurationBasedServerList#getUpdatedListOfServers 获取地址
com.netflix.loadbalancer.ConfigurationBasedServerList#clientConfig
com.netflix.client.config.DefaultClientConfigImpl#get(com.netflix.client.config.IClientConfigKey<T>)LoadBalancerFeignClientfeign.ReflectiveFeign.FeignInvocationHandler#invoke
com.netflix.client.AbstractLoadBalancerAwareClient#executeWithLoadBalancer(S, com.netflix.client.config.IClientConfig)
com.netflix.loadbalancer.BaseLoadBalancer#chooseServer  选择负载均衡 rule.choose(key)
com.netflix.loadbalancer.PredicateBasedRule#choose

参考文献

HowToDoInJava


http://chatgpt.dhexx.cn/article/lORrp7Hm.shtml

相关文章

Spring Cloud-Feign设计原理

什么是Feign&#xff1f; Feign 的英文表意为“假装&#xff0c;伪装&#xff0c;变形”&#xff0c; 是一个http请求调用的轻量级框架&#xff0c;可以以Java接口注解的方式调用Http请求&#xff0c;而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解&am…

再学一下Feign的原理

简介 Feign是Spring Cloud Netflix组件中的一个轻量级Restful的HTTP服务客户端&#xff0c;它简化了服务间调用的方式。 Feign是一个声明式的web service客户端.它的出现使开发web service客户端变得更简单.使用Feign只需要创建一个接口加上对应的注解, 比如FeignClient注解。…

Feign的底层原理

Feign的底层原理 1 EnableFeignClients2 根据接口上的注解创建RequestTemplate3 发送请求 1 EnableFeignClients 这个注解标注在springboot的启动类上,作用是开启feign接口扫描 FeignClientsRegistrar.registerFeignClients()扫描被FeignClient标识的接口生成代理类 public vo…

深入理解Feign之源码解析

转载请标明出处&#xff1a; https://blog.csdn.net/forezp/article/details/73480304 本文出自方志朋的博客 出自方志朋的博客 个人博客纯净版&#xff1a;https://www.fangzhipeng.com/springcloud/2017/08/11/sc-feign-raw.html 什么是Feign Feign是受到Retrofit&#xff…

SpringCloud 中Feign原理(图解)

1 SpringCloud 中Feign原理 1.1 Feign简介 Feign是Netflix公司开源的轻量级rest客户端&#xff0c;使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均衡调用。 1.2 Feign远程调用的基本流程 Feign远程调用&#xff0c;核心就是…

Feign(简介和使用)

1. Feign介绍 通过RestTemplate调用其它服务的API时&#xff0c;所需要的参数须在请求的URL中进行拼接&#xff0c;如果参数少的话或许我们还可以忍受&#xff0c;一旦有多个参数的话&#xff0c;这时拼接请求字符串就会效率低下 Feign是一个声明式的Web Service客户端&#…

什么是Feign?

服务间调用介绍 现有的服务调用方式 利用拼接的方式。 虽然上面有的用不错就很好了 Feign解决了什么问题 Feign的调用方式 Feign体系架构解析-武装到牙齿 上一节我们了解了feign的主要功能&#xff0c;它就像一个自拍杆一样&#xff0c;方便了Eureka的远程调用。可是怎么看…

Feign 的实现原理

Feign 实现原理 Feign是申明式的 HTTP 客户端。代码中创建一个接口并加上FeingClient 注解即可使用。其底层封装了 HTTP 客户端构建并发送的复杂逻辑。同时也可以整合注册中心及 Ribbon 为其提供负载均衡能力&#xff1b;通过整合 Histrix/sentinal 实现熔断限流功能。本期主要…

OpenFeign的实现原理(附Feign和OpenFeign的区别)

目录 问题现象&#xff1a; 问题分析&#xff1a; 拓展&#xff1a; 1、Feign&#xff1a; 2、OpenFeign&#xff1a; 问题现象&#xff1a; 最近在复习SpringCloud的时候看到一个面试题&#xff1a; OpenFeign的实现原理&#xff1f; 问题分析&#xff1a; OpenFeign是Sp…

Feign原理

是一个HTTP请求调用轻量级框架&#xff0c;可以以Java接口注解的方式调用HTTP请求&#xff0c;而不用像Java中通过封装HTTP请求报文的方式直接调用。 Feign解决了什么问题 在服务调用的场景中&#xff0c;我们经常调用基于HTTP协议的服务&#xff0c;而我们经常使用到的框架可…

Feign的使用及原理剖析

feign使用及原理剖析 一、简介 Feign是一个http请求调用的轻量级框架&#xff0c;可以以Java接口注解的方式调用Http请求。Feign通过处理注解&#xff0c;将请求模板化&#xff0c;当实际调用的时候&#xff0c;传入参数&#xff0c;根据参数再应用到请求上&#xff0c;进而转…

Feign基本使用(超详细)

目录 一、Feign概述 二、Feign入门 1.创建服务提供者(provider) 2.创建feign接口 3、创建服务消费者(consumer) 三、Feign 原理 四、Feign优化 1、开启feign日志 2、feign超时问题 3、http连接池 4、gzip压缩 前言 当我们通过RestTemplate调用其它服务的API时&#xff0c;所…

简单理解Feign的原理与使用

文章目录 SpringCloud 总架构图一、简介1.1、负载均衡的概念2.2、Feign概念 二、入门案例2.1、导入依赖2.2、Feign的客户端2.3、调用Feign2.4、开启Feign功能2.5、启动测试2.6、Feign实现原理简单分析 三、负载均衡(Ribbon)四、熔断器支持五、请求压缩和响应压缩六、配置日志级…

【第四章】详解Feign的实现原理

1.1 Feign概述 这篇文章主要讲述如何通过Feign去消费服务&#xff0c;以及Feign的实现原理的解析。 Feign是Netflix开发的声明式、模板化的HTTP客户端&#xff0c;Feign可以帮助我们更快捷、优雅地调用HTTP API。 Feign是⼀个HTTP请求的轻量级客户端框架。通过 接口 注解的…

Feign底层原理分析-自动装载动态代理

本篇文章仅介绍Feign的核心机制&#xff0c;包括如何交由Spring容器托管、动态代理机制等内容&#xff0c;不会过分深入细节。 1、什么是Feign&#xff1f; 这里套用Feign官方Github上的介绍&#xff1a;“Feign是一个灵感来自于Retrofit、JAXRS-2.0、WebSocket的Java Http客户…

Feign原理 (图解)

1.1 简介&#xff1a;Feign远程调用的 Feign远程调用&#xff0c;核心就是通过一系列的封装和处理&#xff0c;将以JAVA注解的方式定义的远程调用API接口&#xff0c;最终转换成HTTP的请求形式&#xff0c;然后将HTTP的请求的响应结果&#xff0c;解码成JAVA Bean&#xff0c;放…

Feign的工作原理

Feign的工作原理 Feign是一个伪Java Http 客户端&#xff0c;Feign 不做任何的请求处理。Feign 通过处理注解生成Request模板&#xff0c;从而简化了Http API 的开发。开发人员可以使用注解的方式定制Request API模板。 在发送Http Request请求之前&#xff0c;Feign通过处理…

Linux命令——tar与gzip详解:文件的打包压缩与解压缩解打包

Linux系统中&#xff0c;最常用的打包命令就是tar了&#xff0c;不仅如此&#xff0c;tar命令还可以解打包解压缩&#xff0c;十分方便。如果单纯想压缩文件&#xff0c;就需要我们的gzip命令了。 使用tar打包归档的包叫做tar包&#xff0c;以.tar结尾 使用gzip压缩的文件&…

Linux 下使用 tar 命令打包指定目录下的所有文件,不包括目录

一&#xff0c;问题描述 无论是 Linux 系统&#xff0c;还是 macOS 系统&#xff0c;我们都可以使用 tar 命令进行文件的压缩打包。命令格式如下&#xff1a; # tar cvf xxxx.tar 要压缩的文件或目录名称但如果要压缩的目录层级比较多时&#xff0c;比如&#xff1a; # tar cvf…

linux tar (打包、压缩、解压)命令

打包程序&#xff1a;tar c: 创建文档t&#xff1a; 列出存档内容x&#xff1a;提取存档f&#xff1a; filename 要操作的文档名v&#xff1a;详细信息 一&#xff1a;打包 打包&#xff1a;是指把文件整合在一起&#xff0c;不压缩 1.将文件打包&#xff1a;tar cf a.ta…