Ribbon负载均衡
什么是Ribbon?
- Ribbon是Netflix提供的一个基于HTTP和TCP的客户端负载均衡工具
- 导入Eureka依赖后无需再导入Ribbon的依赖
Ribbon的主要两个功能
- 简化远程调用
- 负载均衡
服务端负载均衡
-
负载均衡算法在服务端
-
由负载均衡维护服务地址列表
客户端负载均衡
-
负载均衡算法在客户端
-
客户端维护服务地址列表
简化RestTemplate远程调用
步骤:
-
在声明restTemplate的Bean时候,需要添加一个注解:@LoadBalanced
@Configuration public class RestTemplateConfig { @LoadBalanced//远程调用 @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } }
-
在使用restTemplate发起请求时,需要定义url时,host:port可以替换为服务提供方的应用名称
String url = "http://localhost:8000/goods/findOne/"+id;
Ribbon负载均衡策略
RIbbon自带负载均衡,默认负载均衡策略为轮询
-
Ribbon负载均衡策略:
-
随机:RandomRule
-
轮询:RoundRobinRule
-
最小并发:BestAvailableRule
-
过滤:AvailabilityFilteringRule
-
响应时间:WeightedResponseTimeRule
-
轮询重试:RetryRule(默认10次)
-
性能可用性:ZoneAvoidanceRule
-
-
设置负载均衡策略:
-
编码
@Configuration public class MyRule { @Bean public IRule rule(){ //配置为随机 return new RandomRule(); } }
在启动类加上RibbonClient注解
配置Ribbon的负载均衡策略:
-
name:设置提供方的应用名称
-
configuration:设置负载均衡的Bean
@RibbonClient(name = "EUREKA-PROVIDER",configuration = MyRule.class)
-
-
配置
EUREKA-PROVIDER: #服务提供方的应用名称 ribbon: NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #策略类
-