FeignClient原理解读

2024-01-18 21:32
文章标签 原理 解读 feignclient

本文主要是介绍FeignClient原理解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于FeignClient原理解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/620317

相关文章

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

JVM垃圾回收机制之GC解读

《JVM垃圾回收机制之GC解读》:本文主要介绍JVM垃圾回收机制之GC,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、死亡对象的判断算法1.1 引用计数算法1.2 可达性分析算法二、垃圾回收算法2.1 标记-清除算法2.2 复制算法2.3 标记-整理算法2.4

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程