微服务 - 远程调用 OpenFeign
创始人
2025-05-28 04:29:46
0

文章目录

  • 前言
  • 文档
  • 核心类
  • 流程
  • 资源


前言

Feign 是一个声明式的 HTTP 客户端,它可以让你像调用本地方法一样访问远程服务。Feign 的灵感来源于 Retrofit、JAXRS-2.0 和 WebSocket,它通过可定制的解码器和错误处理,编写任意的 HTTP API。Feign 还整合了 Ribbon 和 Hystrix,具有负载均衡和熔断的能力。

Feign 有两种实现:Netflix Feign 和 OpenFeign。Netflix Feign 是 Netflix 开源的原始版本,OpenFeign 是 Spring Cloud 对 Netflix Feign 的封装和扩展,增加了对 Spring MVC 注解的支持,以及对 Spring Boot 的自动化配置。

OpenFeign 的核心作用是为 HTTP 形式的 Rest API 提供了简洁高效的 RPC 调用方式。OpenFeign 的工作原理是通过动态代理的方式,生成接口的实现类,然后通过 Feign 的核心组件,如 ClientContractEncoderDecoder 等,完成对远程服务的调用。OpenFeign 还提供了超时和重试的机制,可以通过配置文件来设置。

文档

可以在 OpenFeign 文档页面,根据使用的版本查看。

核心类

OpenFeign 的核心类有以下几个:

  • @EnableFeignClients:注解,标记应用启动 @FeignClient 客户端。
  • @FeignClient:注解,用于标记一个接口,表示这个接口是一个远程服务的调用客户端。注解中可以指定服务名,URL,配置类等属性。
  • Client:接口,用于定义底层的 HTTP 客户端,如何发送 HTTP 请求。OpenFeign 默认使用 Java 的 URLConnection,也可以使用其他的客户端,如 Apache HttpClient,OkHttp 等。
  • Retryer:接口,用于定义重试的策略,如何在请求失败时进行重试。OpenFeign 默认提供了两种重试器,NeverRetryerRetryer.Default,也可以自定义重试器。
  • Logger:接口,用于定义日志的记录规则,如何记录请求和响应的信息。OpenFeign 默认提供了四种日志级别,NONEBASICHEADERSFULL,也可以自定义日志器。
  • Contract:接口,用于定义注解的处理规则,如何将注解转换为请求模板。OpenFeign 默认使用Spring MVC 的注解,如 @RequestMapping@PathVariable 等,也可以自定义注解。
  • Encoder:接口,用于定义请求参数的编码规则,如何将请求参数转换为请求体。OpenFeign 默认使用 Spring 的 HttpMessageConverter,也可以自定义编码器。
  • Decoder:接口,用于定义响应体的解码规则,如何将响应体转换为 Java 对象。OpenFeign 默认使用 Spring 的 HttpMessageConverter,也可以自定义解码器。

流程

在应用主类上添加 @EnableFeignClients,则注解里的 FeignClientsRegistrar#registerFeignClients 方法将 FeignClientFactoryBean 的 BeanDefinition 添加到 Spring 容器。

@EnableFeignClients  // this
@SpringBootApplication
public class XxxApplication {public static void main(String[] args) {SpringApplication.run(XxxApplication.class, args);}
}

然后通过 FeignClientFactoryBean#getObject 创建 Feign.Builder,最后通过 Feign.Builder#target@FeignClient 修饰的类创建代理 Client 放入 Spring 容器。

@FeignClient("xxx-service")
public interface XxxClient {@GetMapping("/queryPage")Response queryPage(@RequestParam("pageIndex") Integer pageIndex, @RequestParam("pageSize") Integer pageSize);
}

资源

OpenFeign/feign
spring-cloud/spring-cloud-openfeign
OpenFeign 文档

相关内容

热门资讯

安徽省中考改革细节公布最新方案... 高考、中考制度改革,受到广大考生和家长的高度关注,今后考试招生制度怎么改?何时改?什么时候落地?昨天...
重庆市中考改革细节公布最新方案... 教育部今天(20日)召开新闻发布会,披露中考招生制度改革的具体细节。根据教育部日前印发的《关于进一步...
合肥市中考改革细节公布最新方案...  “两考合一” 增加体育 学生可自选科目  今后初中毕业和高中招生考试将“两考合一”,合并为初中学业...
天津市中考改革细节公布最新方案... 各省、自治区、直辖市教育厅(教委),各计划单列市教育局,新疆生产建设兵团教育局:  进一步推进高中阶...
芜湖市中考改革细节公布最新方案... 为认真贯彻落实教育部和省教育厅有关中考中招文件精神,不断深化我市中考中招制度改革,全面实施阳光工程,...
蚌埠市中考改革细节公布最新方案...   【“两考合一” 增加体育 学生可自选科目】  今后初中毕业和高中招生考试将“两考合一”,合并为初...
淮南市中考改革细节公布最新方案... 中考报名往往意味着中考的正式开始,但是淮南的考生和家长都知道最新或2023(历届)淮南中考什么时候报...
马鞍山市中考改革细节公布最新方...   中考改革改什么?  这次改革的目标是逐步建立一个“初中学业水平考试成绩+综合素质评价”的高中招生...
淮北市中考改革细节公布最新方案...   中考改革削减加分项目:最新或2023(历届)中考加分政策改革出炉!  教育部昨天发布《关于进一步...
铜陵市中考改革细节公布最新方案... 教育部今天(20日)召开新闻发布会,披露中考招生制度改革的具体细节。根据教育部日前印发的《关于进一步...
最新或2023(历届)乌海中考... 最新或2023(历届)初中升高中招生理科实验操作考试实施方案一、考试对象、范围全市参加最新或2023...
安庆市中考改革细节公布最新方案...  教育部昨天发布《关于进一步推进高中阶段学校考试招生制度改革的指导意见》,介绍中考招生制度改革的具体...
最新或2023(历届)乌海中考... 一、组织领导在乌海市教育局的统一领导下,成立乌海市中考体育考试领导小组。组 长:高雄文 乌海市教育局...
黄山市中考改革细节公布最新方案... 最新或2023(历届)中考改革最新方案:削减加分项目最新出炉教育部发布《关于进一步推进高中阶段学校考...
最新或2023(历届)乌海中考... 一、考试对象、范围全市未参加信息技术考试的初三年级在籍学生和社会考生。二、考试命题原则与内容考试命题...
关于最新或2023(历届)乌海... 做好最新或2023(历届)初中升高中报考工作的通知各区教育局、市教育招生考试中心、各有关学校:为了进...
乌海市第一中学最新或2023(... 乌海市第一中学最新或2023(历届)特长生招生方案 乌海市第一中学最新或2023(历届)特长生招生工...
最新或2023(历届)北京中高... 目前,相关政策正在研究制定,文理不分科方案将很快出台。下面是小编收集整理的最新或2023(历届)北京...
最新或2023(历届)乌海市第... 乌海市第十中学最新或2023(历届)特长生招生经乌海十中校委会研究决定,市教育局批准,由乌海市第十中...
最新或2023(历届)起甘肃体... 省教育厅公布了《甘肃省学校体育三年行动计划(最新或2023(历届)—最新或2023(历届))》。从最...