1:Feign 是什么
Feign 是一个申明式的 Web 服务客户端,使得编写 Web 服务客户端变得非常容易,只须要创立一个接口,而后在下面增加注解即可。官网:https://github.com/OpenFeign/…
2:Feign 能干什么
- Feign 旨在使编写 Java Http 客户端变得更容易。
- 后面在应用 Spring Cloud Ribbon+RestTemplate 时,利用 RestTemplate 对 http 申请的封装解决,造成了一套模版化的调用办法。然而在理论开发中,因为对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。
- Spring Cloud Feign 在此基础上做了进一步封装,由他来帮忙咱们定义和实现依赖服务接口的定义。在 Spring Cloud Feign 的实现下,咱们只需创立一个接口并应用注解的形式来配置它,即可实现对服务提供方的接口绑定,简化了应用 Spring cloud ribbon 时,主动封装服务调用客户端的开发量。
- Spring Cloud Feign 具备可插拔的注解反对,包含 Feign 注解和 JAX-RS 注解,同时还扩大了 Spring MVC 的注解反对。同时还集成 Ribbon 和 Eureka,以在应用 Feign 时提供 Http 客户端的负载平衡;集成了 Hystrix 以提供熔断、降级等性能。
- 另外,对于 Feign 本身的一些次要组件,比如说编码器和解码器等,都反对可插拔的形式,在有须要的时候能够不便地扩大和替换它们。
3:Feingn 个性
- 可插拔的注解反对,包含 Feign 注解和 JAX-RS 注解
- 反对可插拔的 HTTP 编码器和解码器
- 反对 Hystrix 和它的 Fallback
- 反对 Ribbon 的负载平衡
- 反对 HTTP 申请和响应的压缩
4: Feign 集成
4.1:退出依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
4.2:启动类
须要增加开启 feign 的注解,示例如下:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
4.3:定义接口,示例如下:
@FeignClient(value = "userService")
public interface UserService {@RequestMapping(value = "/userServiceProvider", method = RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value = "name") String name);
}
4.4:配置文件
根本相似于 Ribbon 的配置,application.properties 示例如下:
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
server.port=8770
spring.application.name=service-feign
4.5:调用服务的 Controller 类
- Feign 集成了 Ribbon,仍然是利用了 Ribbon 保护了 userService 的服务列表信息,并且通过轮询实现了客户端的负载平衡。而与 Ribbon 不同的是,通过 feign 只须要定义服务绑定接口,以申明式的办法,优雅而简略的实现了服务调用
- Spring Cloud Feign 只反对 spring mvc 3.x 系列的,springmvc4.0 呈现的一系列注解比方 @GetMapping,@PostMapping,@PutMapping 等等是 Feign 是不反对的