新人的探索,记录一下,遇到同样问题的也可以参考。
0.需要引入:
<!-- 重试机制 ,否则重试不生效 -->
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
1.需要配置:zuul.retryable=true 和 spring.cloud.loadbalancer.retry.enabled=true
2.超时时间应该:zuul > hystrix > ribbon (否则重试完成之前会被熔断)
2.当服务中设置了hystrix,以每个服务的设置为准(好像不对???)
3.ribbon超时 = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1);(发现:重试失败之后,熔断超时之前,也会熔断)
4.OKToRetryOnAllOperations无论请求超时或者socket read timeout都进行重试,(不建议开启,默认读取请求重试,新增修改不重试)
为true时:
post:重试
get:重试
put:重试
delete重试
为false时:(ReadTimeout之后直接熔断)
post不
get重试
put不
delete不
5.httpClient默认重试策略DefaultHttpRequestRetryHandler针对连接超时和获取数据超时并不会重试,需要自定义重试策略。(好像不对???)