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=8770spring.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是不反对的