Feign
是一个声明式的Web Service
客户端,它的目的就是让Web Service
调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。
Feign整合了Ribbon和Hystrix
Feign 特性
- 可插拔的注解支持,包括
Feign
注解和JAX-RS
注解 - 支持可插拔的
HTTP
编码器和解码器 - 支持
Hystrix
和它的Fallback
- 支持
Ribbon
的负载均衡(feign
底层是使用了ribbon
作为负载均衡的客户端,而ribbon
的负载均衡也是依赖于eureka
获得各个服务的地址,所以要引入eureka-client
) - 支持
HTTP
请求和响应的压缩
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Feign的使用
- 添加依赖
- 启动类添加 @EnableFeignClients 注解支持
- 建立Client接口,并在接口中定义需调用的服务方法
- 使用Client接口。
启动类添加注解支持:
@EnableFeignClients
@EnableDiscoveryClient
建立Client接口,并在接口中定义需调用的服务方法
//FeignClient注解用于指定从哪个服务中调用功能 ,里面的名称与被调用的服务名保持一致,并且不能包含下划线
@FeignClient(name = "tensquare-base")
public interface LabelClient {
@RequestMapping(value="/label/{id}", method = RequestMethod.GET)
public Result findById(@PathVariable("id") String id);
}
使用Client接口
@Autowired
private LabelClient labelClient;
@RequestMapping(value = "/label/{labelid}")
public Result findLabelById(@PathVariable String labelid) {
Result result = labelClient.findById(labelid);
return result;
}
spring cloud 中 discovery service
多种实现(eureka、consul、zookeeper等等):
- @EnableDiscoveryClient基于spring-cloud-commons
- @EnableEurekaClient基于spring-cloud-netflix
- 如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient
- 如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient