电影网站建设教学视频,学设计在哪学比较好,《原始传奇》官方网站,中国机械加工网官网址Spring Cloud OpenFeign原理分析 概述 Spring Cloud 微服务实践也有挺多年了#xff0c;一直想着总结一下这系列的知识点#xff0c;最近终于下定决心来出一个Spring Cloud 系列文章了。本文主要围绕fegin组件来进行讲解#xff0c;文中将会给出基础使用的示例#xff0c;还…Spring Cloud OpenFeign原理分析 概述 Spring Cloud 微服务实践也有挺多年了一直想着总结一下这系列的知识点最近终于下定决心来出一个Spring Cloud 系列文章了。本文主要围绕fegin组件来进行讲解文中将会给出基础使用的示例还会通过源码解析的方式详细分析fegin的实现原理。OpenFeign是一个申明式的RestFul网络请求客户端OpenFeign还集成了Ribbon和Hystrix来提供负载均衡和网络断路器的功能之前老版本 Spring Cloud 所集成的 OpenFeign 默认采用了 Ribbon 负载均衡器。但由于Netflix 已不再维护 Ribbon所以从 Spring Cloud 2021.x 开始集成的 OpenFeign 中已彻底丢弃Ribbon而是采用 Spring Cloud 自行研发的 Spring Cloud Loadbalancer 作为负载均衡器。
一、使用示例 要使用feign功能首先我们需要引入如下的依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency 引入Maven依赖我们就可以编写Feign接口了如下所示 我们还需要在程序入口加上EnableFeignClients注解开启Feign功能 这样一个简单的Feign远程服务接口就实现了。 前面提到Feign还具备负载均衡和熔断器功能这样简单的配置我们具备这两个核心功能吗
显然是不能的要实现负载均衡我们需要引入如下依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-loadbalancer/artifactId
/dependency
而要实现熔断器功能我们需要引入如下依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-hystrix/artifactId
/dependency
在application.yml配置文件中添加如下配置启用hystrix
# openfeign 开启 hystrix 的支持 feign: hystrix: enabled: true
接下来我们需要改造一下FeignClient: 可以看到在原来的基础上加了fallback的配置然后另外实现了一个HystriFallback的实现类 到此Feign的一个实际应用就完成了接下来的章节我将带领大家从源码级别来分析一下Feign的实现原理。
二、原理分析 再做原理分析之前我们先看一张Feign源码解析流程总览图 上面有介绍Feign是通过EnableFeignClients注解开启的通过注解的定义我们看到这里import了一个FeignClientsRegistrar类。 我们看到FeignClientsRegistrar类实现了ImportBeanDefinitionRegistrar接口从而重写了registerBeanDefinitions方法类的集成结构如下图所示 其中ImportBeanDefinitionRegistrar 负责动态注入 IOC Bean分别注入 Feign 配置类、FeignClient Bean这里我们看到了如下方法 该方法很明显是注入了加了FeignClient注解的bean。这里我们跟进到registerFeignClient方法中。 可以看出这里分为直接加载bean和懒加载bean两种方式这里我们以懒加载方式做例子进行分析。上面说到 FeignClient 修饰的接口最终填充到 IOC 容器的类型是 FeignClientFactoryBean这里我们要重点关注一下这个类的结构 这里我们主要关注一下FactoryBean#getObject 方法这里使用了一个contextId这个值是什么时候初始化进去的呢我们了解springboot自动装配原理的同学很容易就发现了是在FeignAutoConfiguration中初始化的。 在getObject 方法中直接调用了getTarget()方法其中完成了FeignClient代理对象的注入负载均衡以及熔断器的设置。
总结 本篇文章结合Feign的使用示例讲解了Feign的核心原理文中主抓Feign的业务主线忽略了一下细枝末节的阐述后续如有需要再推出技术细节方面的文章