最近在学习SpringCloud,也是遇到各种问题,各种查阅资料,但是相关资料很少,也是一步踩一个坑,所以总结一下,方便以后查看。
以下是请求连接和响应的超时时间配置
在SpringCloud项目中,RestTemplate一般通过负责均匀来使用,其超时时间不能通过ribbon直接来设置,这样设置是无效的。
错误的
#ribbon的超时时间
ribbon:
ReadTimeout: 500 #读取超时时间
ConnectTimeout: 2000 #连接超时时间
正确的
@Bean
@LoadBalanced //开启负载均衡注解
public RestTemplate restTemplate(){
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectTimeout(500);
httpRequestFactory.setReadTimeout(2000);
return new RestTemplate(httpRequestFactory);
}
以下是重试相关配置
Ribbon通过增加Spring-retry还有相关配置开启了重试,这个重试机制对于OpenFeign是不起作用的,但是对于@LoadBalanced注解修饰的RestTemplate是有作用的。
pom
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
yml
spring:
application:
name: consumer
cloud:
loadbalancer:
retry:
enabled: true
provider:
ribbon:
#负载均衡策略
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #配置规则 随机
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule #配置规则 重试
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule #配置规则 响应时间权重
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #配置规则 最空闲连接策略
# 同一实例最大重试次数,不包括首次调用
MaxAutoRetries: 1
# 重试其他实例的最大重试次数,不包括首次所选的server
MaxAutoRetriesNextServer: 2
# 是否所有操作都进行重试
#当OkToRetryOnAllOperations设置为false时,只会对get请求进行重试。
#如果设置为true,便会对所有的请求进行重试,如果是put或post等写操作,
#如果服务器接口没做幂等性,会产生不好的结果,所以OkToRetryOnAllOperations慎用。
OkToRetryOnAllOperations: false
provider是注册中心服务的名称,表示只对provider这个服务生效,其它服务不生效
记录一个问题,配置负载均衡策略的时候,使用全局ribbon配置不生效,只有指定服务才生效,原因暂时还不清楚,看的得撸一下源码了
如果不配置ribbon重试次数,默认重试一次
ribbon重试计算公式:MaxAutoRetries+MaxAutoRetriesNextServer+(MaxAutoRetries *MaxAutoRetriesNextServer) ,即重试5次 (不包括首次调用)一共产生6次调用。
楼主也是刚开始学习springcloud,如果有什么不对的地方,欢迎大家指出,一起学习!!!