Spring Cloud Open Feign源码分析(下)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Spring Cloud Open Feign源码分析(下)

总结:@EnableFeignClients的时候,它会扫描指定路径下FeignClient注解声明的接口,生成动态代理的类,调用GetObject的时候最终会调用getTarget完成调用。


隔离上下文 NamedContextFactory中存储contexts;通过contextID(String)来得到AnnotationConfigApplicationContext,现在子容器中找,如果找不到再去父容器中找


image.png


image.png


总结:


微信图片_20220128164447.png


Feign里边 发起请求,通过动态代理(FeignClientInvocationHandler),动态代理过程中有一个很重要的部分就是Contract(默认用的是SpringMVCContract,它会对我们请求的数据FeignClient模板进行解析),之后会得到一个MethodHandler,那么分发之前会做一个encorder序列化,将对象转换为成JSON格式,序列化之后通过Request发起请求,发起请求之前LoadBalancerFeignClient做负载均衡,可以通过logger进行日志记录,接着重试机制,如果发送失败,重新发送,接着发起HTTP请求;接着Response回应,反序列化。


image.png


image.png


总体:

Robbin的两种方式


@LoadBalancer

LoadBalancerClient

都是对RestTemplate进行操作

Robbin对得到的alllist和uplist进行负载均衡,根据IRule规则进行负载均衡(权重机制(区间算法)),/定时任务不断地发起模拟请求->LoadBalancerstat,Iping(每10s判断一次目标服务的地址,如果不可用则剔除无效地址)判断是否可用, serverList(定时任务,每30s更新一次服务列表)

如何自定义负载均衡算法,自定义


Feign->http通信:

让开发人员远程通信更加简单,对请求进行模板化开发,已经集成Robbin的使用。


对于Feign是如何扫描的,FeignClientRegister,对于每一个FeignClient注册一个工厂FeignClientFactoryBean;工厂Bean里边返回的是基于工厂bean的特性,生成动态代理类FeignInvokeHandler,使用JDK动态代理根据接口实现


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
17天前
|
负载均衡 Java API
Java一分钟之-Spring Cloud OpenFeign:声明式服务调用
【6月更文挑战第9天】Spring Cloud OpenFeign是声明式服务调用库,简化了微服务间调用。通过动态代理,它允许开发者用Java接口调用HTTP服务,支持服务发现、负载均衡。本文介绍了OpenFeign的基本概念,展示了如何添加依赖、开启客户端和定义服务接口。还讨论了接口调用失败、超时重试和日志配置等问题及其解决方案,并提供了自定义Feign配置的代码示例。通过学习,读者可以更好地在微服务架构中使用OpenFeign进行服务通信。
181 4
|
6天前
|
存储 安全 Java
Spring Security 6.x OAuth2登录认证源码分析
上一篇介绍了Spring Security框架中身份认证的架构设计,本篇就OAuth2客户端登录认证的实现源码做一些分析。
31 2
Spring Security 6.x OAuth2登录认证源码分析
|
6天前
|
Java 开发者 Sentinel
Spring Cloud系列——使用Sentinel进行微服务保护
Spring Cloud系列——使用Sentinel进行微服务保护
23 5
|
9天前
|
Java 测试技术 持续交付
Java一分钟之-Spring Cloud Contract:契约测试
【6月更文挑战第16天】Spring Cloud Contract是微服务契约测试框架,通过DSL定义接口行为,使用WireMock生成存根进行独立开发验证。常见问题包括契约编写不清晰、未集成到CI/CD和契约版本控制混乱。例如,定义一个`GET /greeting`返回JSON响应的契约,Spring Cloud Contract会自动生成测试代码,帮助确保服务间接口一致性,提升开发效率和系统稳定性。
32 7
|
5天前
|
安全 Java 数据安全/隐私保护
在Spring Cloud中实现单点登录(Single Sign-On, SSO)
在Spring Cloud中实现单点登录(Single Sign-On, SSO)
32 2
|
5天前
|
监控 Java Sentinel
Spring Cloud微服务架构
Spring Cloud微服务架构
24 1
|
7天前
|
Java 应用服务中间件 微服务
spring boot 中Feign调用提示Request header is too large 解决方案
spring boot 中Feign调用提示Request header is too large 解决方案
13 1
|
11天前
|
Java Nacos 数据格式
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
37 3
|
11天前
|
存储 Java Spring
Spring IOC 源码分析之深入理解 IOC
Spring IOC 源码分析之深入理解 IOC
29 2
|
11天前
|
Java 数据库 开发者
深入解析 Spring Cloud Seata:分布式事务的全面指南
深入解析 Spring Cloud Seata:分布式事务的全面指南
30 1