此段笔记均摘自 翟永超 ——《springcloud微服务实战》,特此标出,以示尊敬。
一 Spring Cloud Ribbon 客户端负载均衡
1、 @LoadBalanced 开启客户端负载均衡
沁bbon 的时候 Spring Cloud 默认采用ZoneAware-LoadBalancer
2、 Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 NetflixRibbon 实现
3、客户端负载均衡和服务端负载均衡最大的不同点在千上面所提到的服务清单所存储
的位置。 在客户端负载均衡中, 所有客户端节点都维护着自己要访问的服务端清单
4、负载均衡策略
Random Rule 随机
RoundRobinRule 线性轮询
RetryRule 具备重试机制的实例选择
WeightedResponseTimeRule 对 RoundRobinRule 的扩展, 增加了根据实例的运行情况来计算权重
二 RestTemplate
最后一个参数didi 会替换 url 中的{1} 占位符, 而返回的 ResponseEntity对象中的 body 内容类型会根据第二个参数转换为 String 类型。
Res七Template restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://USER-SERVICE/user?name={1} ", String. class, "didi") ;
String body = responseEntity. getBody () ;
若我们希望返回的 body 是一个 User 对象类型,也可以这样实现:
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<User> responseEntity = restTemplate.getForEntity("http://USER-SERVICE/user?name={l}", User.class, "didi");
User body= responseEntity.getBody();
三、重试功能
开启重试机制
spring.cloud.loadbalancer.retry.enabled=true
断路器的超时时间需要大于Ribbon的超时时间, 不然不会触发重试
hystrix.command.default.execution.isolation.thread.timeoutinMilliseconds=lOOOO
请求连接的超时时间
hello-service.ribbon.ConnectTimeout=250
请求处理的超时时间
hello-service.ribbon.ReadTimeout=lOOO
对所有操作请求都进行重试
hello-service.ribbon.OkToRetryOnAllOperations=true
切换实例的重试次数
hello-service.ribbon.MaxAutoRetriesNextServer=2
对当前实例的重试次数
hello-service.ribbon.MaxAutoRetries=l
根据如上配置, 当访问到故障请求的时候, 它会再尝试访问 一次当前实例(次数由
MaxAutoRetries配置), 如果不行, 就换 一个实例进行访问, 如果还是不行, 再换 一次
实例访问(更换次数由MaxAutoRe红iesNextServer配置), 如果依然不行, 返回失败
信息。