OpenFeign详解(原理流程及使用实例)

OpenFeign详解(原理流程及使用实例)-mikechen

OpenFeign是微服务的核心组件,是构建微服务的基石,下面我就全面来详解OpenFeign@mikechen

OpenFeign定义

OpenFeign 的全称是 Spring Cloud OpenFeign,是 Feign(进入停更维护状态) 的升级,是 Spring 官方推出的一种声明式服务调用和负载均衡组件。

OpenFeign是一种声明式模板化的HTTP客户端,在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样。

 

OpenFeign与Feign

OpenFeign 与Feign的关系如下图所示:

OpenFeign详解(原理流程及使用实例)-mikechen

OpenFeign 是 Spring Cloud 对 Feign 的二次封装,它具有 Feign 的所有功能。

OpenFeign 在 Feign 的基础上增加了对 Spring MVC 注解的支持,例如:@RequestMapping、@GetMapping 和 @PostMapping 等。

 

OpenFeign使用

1.引入OpenFeign Maven依赖

<!--openfeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

 

2.开启Feign的客户端

启动类上加上@EnableFeignClients,开启Feign的客户端服务,如下所示:

OpenFeign详解(原理流程及使用实例)-mikechen

@EnableFeignClients:该注解用于开启 OpenFeign 功能,当 Spring Cloud 应用启动时OpenFeign 会扫描标有 @FeignClient 注解的接口,生成代理并注册到 Spring 容器中。

 

3.定义接口

定义一个接口,并加上@FeignClient注解,同时使用REST风格的接口请求服务。

如下所示:

OpenFeign详解(原理流程及使用实例)-mikechen

@FeignClient:该注解用于通知 OpenFeign 组件对 @RequestMapping 注解下的接口进行解析,并通过动态代理的方式产生实现类,实现负载均衡和服务调用。

 

4.控制层调用

控制层直接调用即可,如下所示:

OpenFeign详解(原理流程及使用实例)-mikechen

@GetMapping:向服务提供者发起 GET 请求。

 

OpenFeign原理

OpenFeign的工作原理,如下图所示:

OpenFeign详解(原理流程及使用实例)-mikechen

OpenFeign整体工作流程,分为如下7步:

1)首先通过@EnableFeignCleints注解开启FeignCleint;

2)根据OpenFeign的规则编写接口并加@FeignCleint注解;

3)程序启动后会进行包扫描,扫描所有的@ FeignCleint的注解的接口,通过jdk的动态代理生成接口的实现类;

4)当实现类被生成的时候,会根据反射的原理拿到@FeignClein的服务名执行服务发现的过程;

5)得到某个服务名所有服务实例后,执行负载均衡拿到一个实例;

6)通过反射读取到SpringMVC的注解,获取请求路径、参数等配置信息,执行服务服务调用;

7)序列化反序列化,发送请求,获得响应返回。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法