SpringCloud之Feign
SpringCloud之Feign
.
推荐文档:https://www.springcloud.cc/spring-cloud-dalston.html#spring-cloud-feign
1. 什么是Feign
Feign是声明式HTTP客户端,专为微服务架构设计,用于简化服务间的远程调用,它让微服务之间的调用变得更简单,类似controller调用service。
Feign,主要是社区版,大家都习惯面向接口编程。这个是很多开发人员的规范。调用微服务访问两种方法:
- 微服务名字 【ribbon】
- 接口和注解 【feign】
2. Feign能干什么?
Feign旨在使编写Java Http客户端变得更容易。
使用Ribbon + RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一个客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步的封装,由它来帮助我们定义和实现依赖服务接口的定义,在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它 (类似以前Dao接口上标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解),即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon 时自动封装服务调用客户端的开发量。
Feign默认集成了Ribbon,利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。
3. 声明式调用
通过定义接口 + @FeignClient 注解绑定远程服务,无需手动构造 HTTP 请求或解析响应。
代码示例:
@FeignClient(name = "user-service", fallback = UserFallback.class)
public interface UserServiceFeign {@GetMapping("/user/{id}")User getUser(@PathVariable("id") Long id);
}
4. 集成负载均衡与容错
-
内置 Ribbon 实现客户端负载均衡(默认轮询策略)。
-
支持 Hystrix/Sentinel 熔断降级(通过 fallback 指定降级逻辑)。
5. 与 Spring 生态无缝集成
-
兼容 Spring MVC 注解(如 @RequestMapping、@PathVariable)。
-
自动注册到服务发现组件(如 Eureka)。