当前位置: 首页 > 后端技术 > Java

SpringCloud微服务实践——搭建企业级开发框架(十三):OpenFeign+Ribbon实现高可用重试机制

时间:2023-04-01 19:45:02 Java

SpringCloudOpenFeign默认使用Ribbon实现负载均衡和重试机制,虽然Feign有自己的重试机制不过这个功能在SpringCloudOpenFeign中基本没有用到。除非有特定的业务需求,否则你可以实现自己的Retryer,然后全局注入或者为特定的客户端使用特定的Retryer。在SpringCloud系统项目中,引入重试机制在保证高可用的同时,也会带来一些其他的问题,比如幂等操作或者一些不必要的重试。下面在实践中测试一下SpringCloud架构。重试机制。1、由于Ribbon默认开启了重试机制,重试机制可以使用上一章的代码进行测试。这里为了区分是否重试,我们将gitegg-service-cloud下配置的Ribbon负载均衡策略改为轮询。按照上一章的方法启动三个服务,然后在页面快速点击测试,发现服务端口已经定时切换了。然后,快速关闭其中一个gitegg-service-system服务,继续在页面快速点击测试。我们发现接口并没有报错,而是切换到了其中一个服务端口,说明重试机制是有效的。2、接下来我们修改配置文件禁用重试机制,可以看到系统报错的结果,因为服务关闭后没有重试机制。修改GitEgg-Platform项目下子项目gitgg-service-cloud的代码,添加Ribbon相关的配置文件,因为Ribbon默认开启重试机制,所以这里选择禁用ribbon:#RequestconnectiontimeoutConnectTimeout:5000#请求处理/响应超时时间ReadTimeout:5000#重试所有操作请求OkToRetryOnAllOperations:false#切换实例重试次数MaxAutoRetriesNextServer:0#当前实例重试次数MaxAutoRetries:03,GitEgg-Platformreinstall,GitEgg-Cloudprojectreinstall导入依赖,然后重新启动三个服务。这时,快速点击测试界面,然后关闭其中一项服务。发现访问接口报错是因为接口访问服务时没有重试机制。本文源码为https://gitee。com/wmz1930/GitEgg的第13章分支。