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

文章目录

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


前言

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 的核心组件,如 Client,Contract,Encoder,Decoder 等,完成对远程服务的调用。OpenFeign 还提供了超时和重试的机制,可以通过配置文件来设置。

文档

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

核心类

OpenFeign 的核心类有以下几个:

  • @EnableFeignClients:注解,标记应用启动 @FeignClient 客户端。
  • @FeignClient:注解,用于标记一个接口,表示这个接口是一个远程服务的调用客户端。注解中可以指定服务名,URL,配置类等属性。
  • Client:接口,用于定义底层的 HTTP 客户端,如何发送 HTTP 请求。OpenFeign 默认使用 Java 的 URLConnection,也可以使用其他的客户端,如 Apache HttpClient,OkHttp 等。
  • Retryer:接口,用于定义重试的策略,如何在请求失败时进行重试。OpenFeign 默认提供了两种重试器,NeverRetryer 和 Retryer.Default,也可以自定义重试器。
  • Logger:接口,用于定义日志的记录规则,如何记录请求和响应的信息。OpenFeign 默认提供了四种日志级别,NONE,BASIC,HEADERS,FULL,也可以自定义日志器。
  • 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 文档

相关内容

热门资讯

记者手记|时代大潮里的笃行与担... 来源:新华社记者手记|时代大潮里的笃行与担当新华社记者韩梁 朱瑞卿 伍岳9月的新德里草木葱郁,阳光热...
被骂 “君子之贼” 高若讷有点...     ◎宋慧敏    北宋景祐三年(1036年)一个春日,谏官高若讷接到一封信,写信人是刚刚入朝任...
烂缦胡同:烟火气里涌动青春创业...     近日,在“全国文化中心建设巡礼”主题采访活动中,北京青年报记者走进北京市西城区牛街街道烂缦胡...
科技赋能实体 金融护航出海     9月9日至13日,2026年中国国际服务贸易交易会(以下简称服贸会)在北京首钢园举办,今年的...
湖北大学最新或2023(历届)...   1、考生自最新或2023(历届)4月1日起可在湖北大学招生信息网(http://zsxx.hub...