OpenFeign是微服务的核心组件,是构建微服务的基石,下面我就全面来详解OpenFeign@mikechen
OpenFeign定义
OpenFeign 的全称是 Spring Cloud OpenFeign,是 Feign(进入停更维护状态) 的升级,是 Spring 官方推出的一种声明式服务调用和负载均衡组件。
OpenFeign是一种声明式模板化的HTTP客户端,在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样。
OpenFeign与Feign
OpenFeign 与Feign的关系如下图所示:
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的客户端服务,如下所示:
@EnableFeignClients:该注解用于开启 OpenFeign 功能,当 Spring Cloud 应用启动时OpenFeign 会扫描标有 @FeignClient 注解的接口,生成代理并注册到 Spring 容器中。
3.定义接口
定义一个接口,并加上@FeignClient注解,同时使用REST风格的接口请求服务。
如下所示:
@FeignClient:该注解用于通知 OpenFeign 组件对 @RequestMapping 注解下的接口进行解析,并通过动态代理的方式产生实现类,实现负载均衡和服务调用。
4.控制层调用
控制层直接调用即可,如下所示:
@GetMapping:向服务提供者发起 GET 请求。
OpenFeign原理
OpenFeign的工作原理,如下图所示:
OpenFeign整体工作流程,分为如下7步:
1)首先通过@EnableFeignCleints注解开启FeignCleint;
2)根据OpenFeign的规则编写接口并加@FeignCleint注解;
3)程序启动后会进行包扫描,扫描所有的@ FeignCleint的注解的接口,通过jdk的动态代理生成接口的实现类;
4)当实现类被生成的时候,会根据反射的原理拿到@FeignClein的服务名执行服务发现的过程;
5)得到某个服务名所有服务实例后,执行负载均衡拿到一个实例;
6)通过反射读取到SpringMVC的注解,获取请求路径、参数等配置信息,执行服务服务调用;
7)序列化反序列化,发送请求,获得响应返回。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》