Feign主要时用于隐藏Rest请求,省去拼接url、参数等等操作 。
使用时在Spring Boot启动类上添加注解@EnableFeignClients,需要添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
然后用@FeignClient注解声明一个Feign客户端,该客户端是一个接口
@FeignClient("a-service")
public interface MyFeignClient {
@RequestMapping("/.../{param}")
MyObj method(@PathVariable("param") String param);
}
使用下面的方式调用:
@Autowired
private MyFeignClient myFeignClient;
public void methodTest(String param) {
// 不再有DiscoveryClient和RestTemplate
MyObj myObj = myFeignClient.method(param);
System.out.println(myObj);
}
Feign中本身已经集成了Ribbon和Hystix,不需要加入新的依赖
配置说明(.yml方式)
## 高版本feign, 需要开启才能处理熔断
feign:
hystrix:
enabled: true
## 负载均衡策略需要指定服务(serviceId)才能生效
a-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
## 负载均衡超时设置等可以不指定服务(serviceId)
ribbon:
ConnectTimeout: 250 # 连接超时时间(ms)
ReadTimeout: 1000 # 通信超时时间(ms)
OkToRetryOnAllOperations: true # 是否对所有操作重试
MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
MaxAutoRetries: 1 # 同一实例的重试次数
## 熔断超时时长设置
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 2000 # 2000ms, 一般需要比ribbon超时时间长