为服务利用中,ribbon 和 hystrix 同时呈现,feign 整合两者, 并提供了 申明式消费者 客户端.
feign 是一种集成工具性能有: 近程调用,ribbon- 负载平衡和重试,hystrix- 降级 熔断
Fegin 提供了申明式客户端, 只须要定义一个接口, 就能够通过接口做近程调用. 具体调用代码通过动静代理增加.
// 调用商品服务的近程调用接口
// 通过注解配置 3 件事:调用哪个服务,调用什么门路,向这个门路提交什么参数
@FeignClient(name="item-service")
public interface ItemFeignClient {@GetMapping("/{orderId}")
JsonResult<List<Item>> getItems(@PathVariable String orderId);
}
1.OpenFegin 依赖
2. 启动类增加 @EnableFeignClient
3. 定义申明式客户端接口 例如:ItemFeignClient UserFeignClient OrderFeignClient
4. 增加一个测试用的控制器, 应用三个申明式客户端接口调用近程服务.
负载平衡 重试
Feign 默认启用了 Ribbon 的负载平衡和重试 0 配置.
默认重试参数:MaxAutoRetries=0 MaxAutoRetriesNextServer=1 ReadTimeout=1000
重试参数配置
# 对所有服务都无效
ribbon:
MaxAutoRetries: 1
# 对 item-service 独自配置,对其余服务有效
item-service:
ribbon:
MaxAutoRetries: 0
默认不启用 hystrix,Feign 不举荐启用 hystrix
1. 增加 hystrix 残缺依赖
2. 增加 @EnableCircuitBreaker
3.yml 配置 feign.hystrix.enable=true
在申明式客户端接口的注解中, 制订一个 降级类(之前的是降级办法)
@FeignClient(name="item-service", fallback= 降级类.class)
public interface ItemFeignClient {....}
降级类要作为申明式客户端接口的子类来定义.
用 actuator 裸露 hystrix.stream 监控端点
1.actuator 依赖
2. 裸露监控端点
m.e.w.e.i=hystrix.stream
3.http://localhost:3001/actuator/hystrix.stream
4. 通过调用后盾服务, 产生监控数据.
10 秒内 20 次申请,50% 失败执行了降级代码.