1. 什么是Ribbon
是 Netflixfa 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在 SpringCloud 中,Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Eureka中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的
列表信息,并基于内置的负载均衡算法,请求服务
2. Ribbon的主要作用
- 服务调用
基于Ribbon实现服务调用, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助
RestTemplate 最终进行调用
- 负载均衡
当有多个服务提供者时,Ribbon可以根据负载均衡的算法自动的选择需要调用的服务地址
3. Ribbon使用
-
引入依赖
eureka中自动依赖ribbon,所以不需要单独引入 -
使用@LoadBalanced 开启
@LoadBalanced //使用ribbon的@LoadBalanced
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
//配合RestTemplate直接写服务名称即可
String url = StrUtil.format("http://service-product/product/list?ids={}",
StrUtil.join(",", idList));
- 更改ribbon负载均衡策略
ribbon默认使用轮询的策略
# ribbon的负载均衡策略修改 服务名 - ribbon - NFLoadBalancerRuleClassName : 策略的全类名
service-product:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #随机策略
- ribbon的重试机制
添加重试的依赖
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
更新配置文件
ribbon:
MaxAutoRetriesNextServer: 2 //向后更换几台服务器进行重试
MaxAutoRetries: 1 //对单台服务器的重试次数
OkToRetryOnAllOperations: true //是否对所用类型请求都进行重试,默认支队get重试
ConnectionTimeout: 时间 //简历连接的超时时间
ReadTimeout:时间 //接受相应的超时时间