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

  Spring Cloud OpenFeign 默认是使用Ribbon实现负载均衡和重试机制的,虽然Feign有自己的重试机制,但该功能在Spring Cloud OpenFeign基本用不上,除非有特定的业务需求,则可以实现自己的Retryer,然后在全局注入或者针对特定的客户端使用特定的Retryer。
  在SpringCloud体系项目中,引入的重试机制保证了高可用的同时,也会带来一些其它的问题,如幂等操作或一些没必要的重试,下面我们实际操作来测试Spring Cloud架构中的重试机制。

  OpenFeign和Ribbon都是Spring Cloud提供的微服务框架。OpenFeign是一个轻量级的HTTP客户端,用于简化基于HTTP的API调用,而Ribbon则是一个负载均衡器,用于将请求分发到不同的服务实例。它们的结合可以提供以下优势:

  1. 简化API调用:OpenFeign提供了声明式API,无需手动构建HTTP请求和解析响应体,只需定义接口和注解,即可完成API调用。

  2. 服务发现与负载均衡:Ribbon可以自动发现服务实例,并根据负载均衡策略将请求分配到不同的实例上。结合OpenFeign,可以轻松地与其他服务进行交互。

  3. 降低耦合度:使用OpenFeign和Ribbon,服务间通信的细节被封装起来,使得服务之间的耦合度降低,同时也使得服务的调用更加清晰和简单。

  4. 提高可靠性:Ribbon具备重试和断路器等功能,可以提高服务的可靠性。当一个服务实例不可用时,Ribbon会自动将请求分配到其他可用的实例上。

  OpenFeign和Ribbon的结合可以为微服务架构提供更高效、更可靠和更易于维护的服务调用方式。

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项目重新导入依赖,然后重启三个服务,这时,快速点击测试接口的时候再关闭其中一个服务,发现接口在访问服务的时候因为没有重试机制,导致访问接口报错

SpringCloud微服务实战——搭建企业级开发框架(十三):OpenFeign+Ribbon实现高可用重试机制_第1张图片
  微服务架构中,服务之间的调用是非常频繁的,因此高可用重试机制非常重要。如果一个服务不能正常工作,那么它可能会导致整个系统的故障,这会影响到整个业务流程的运转。高可用重试机制可以帮助我们解决这个问题。

  首先,高可用重试机制可以帮助我们在发生故障的时候快速恢复。在服务调用失败的情况下,重试机制会自动重新调用服务,直到调用成功或达到最大重试次数为止。这可以保证服务的可用性和稳定性。

  其次,高可用重试机制可以帮助我们在服务负载过高的情况下进行负载均衡。如果一个服务的负载过高,那么我们可以通过重试机制将请求发送到其他可用的服务上,从而有效地分散服务的负载。

  最后,高可用重试机制还可以帮助我们降低系统运维的工作量。如果没有高可用重试机制,那么在发生服务故障的情况下,我们需要手动重新调整服务的配置或者重新部署服务,这将会增加运维人员的工作量。而高可用重试机制可以帮助我们自动处理这些问题,减少运维工作量。

  微服务架构中的高可用重试机制非常重要,可以帮助我们提高服务的可用性和稳定性,实现负载均衡,同时还可以降低系统运维的工作量。

本文源码在https://gitee.com/wmz1930/GitEgg 的chapter-13分支。

GitEgg-Cloud是一款基于SpringCloud整合搭建的企业级微服务应用开发框架,开源项目地址:

Gitee: https://gitee.com/wmz1930/GitEgg
GitHub: https://github.com/wmz1930/GitEgg

欢迎感兴趣的小伙伴Star支持一下。

你可能感兴趣的:(SpringCloud,Maven,spring,cloud,微服务,ribbon)