Spring Cloud OpenFeign 默认是应用 Ribbon 实现负载平衡和重试机制的,尽管 Feign 有本人的重试机制,但该性能在 Spring Cloud OpenFeign 根本用不上,除非有特定的业务需要,则能够实现本人的 Retryer,而后在全局注入或者针对特定的客户端应用特定的 Retryer。
在 SpringCloud 体系我的项目中,引入的重试机制保障了高可用的同时,也会带来一些其它的问题,如幂等操作或一些没必要的重试,上面咱们实际操作来测试 Spring Cloud 架构中的重试机制。
1、因为 Ribbon 默认是开启重试机制的,应用上一章节的代码能够测试重试机制,这里为了分辨是否执行了重试,咱们把 gitegg-service-cloud 上面配置的 Ribbon 负载平衡策略改为轮询。依照上一章节形式启动三个服务,而后页面疾速点击测试,发现服务端口始终有法则的切换。而后,疾速敞开其中一个 gitegg-service-system 服务,此时持续在页面疾速点击测试,咱们发现接口并没有报错,而是切换到其中一个服务的端口,这阐明重试机制无效。
2、接下来,咱们批改配置文件使重试机制生效,就能够看到服务敞开后因没有重试机制零碎报错的后果。批改 GitEgg-Platform 工程下子工程 gitegg-service-cloud 的代码,增加 Ribbon 相干配置文件,因为 Ribbon 默认是开启重试机制的,这里抉择敞开
ribbon:
#申请连贯的超时工夫
ConnectTimeout: 5000
#申请解决 / 响应的超时工夫
ReadTimeout: 5000
#对所有操作申请都进行重试
OkToRetryOnAllOperations: false
#切换实例的重试次数
MaxAutoRetriesNextServer: 0
#以后实例的重试次数
MaxAutoRetries: 0
3、GitEgg-Platform 从新 install,GitEgg-Cloud 我的项目从新导入依赖,而后重启三个服务,这时,疾速点击测试接口的时候再敞开其中一个服务,发现接口在拜访服务的时候因为没有重试机制,导致拜访接口报错
本文源码在 https://gitee.com/wmz1930/GitEgg 的 chapter-13 分支。