10Zuul 重试机制 · SpringCloud微服务实战 · 看云

10. 重试机制

导航

本节代码地址


之前我们在介绍Feign,也讲到的重试机制,现在我们来说一下Zuul的重试机制,希望Zuul 在转发服务的时候,如果失败可以重试几次,可能第一次是网络抖动,或者转发到相同服务名是的其它地址上面。
spring-retry是spring提供的一个基于spring的重试框架,我们直接使用这个框架。

10.1 maven 配置添加

<!--重试包-->
<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

10.2 修改应用配置

zuul:
    retryable: true

这个开关默认是关闭的,开启后的配置和Ribbon 配置一样,如下

#重试
ribbon:
  #配置首台服务器重试1次
  MaxAutoRetries: 1
  #配置其他服务器重试两次
  MaxAutoRetriesNextServer: 2
  #链接超时时间
  ConnectTimeout: 500
  #请求处理时间
  ReadTimeout: 500
  #每个操作都开启重试机制
  OkToRetryOnAllOperations: true

这里可以直接使用Ribbon 的配置,是因为zuul 里面已经集成了Ribbon的包

10.3 在Ribbon Server添加随机延时

超过500秒就会重试

int millis = new Random().nextInt(3000);
System.out.println("client线程休眠时间:"+millis);
Thread.sleep(millis);

10.4 重启项目

浏览器或Postman 输入localhost:8679/ribbon/user/1
975d98e1a81cc571a92b8e6a43e759ed_MD5.png

可以看到控制台重试的日志
c196722d7b100b1a706e02fcf3e8e472_MD5.png

这里和Feign 章节说的重试是一样的,可以回顾一下