@Autowired
Private LoadBalancerClient loadBalancerClient; //ribbon 负载均衡客户端
ServiceInstance si = loadBalancerClient.choose(“微服务名称”); //负载均衡筛选
si.getHost(); //获取host地址
si.getPort();//获取端口号
什么Ribbon,解决什么问题
- Ribbon 是一个基于http和tcp的客户端负载均衡工具,它是机遇Netflix Ribbon实现的
- 它不像spring cloud服务注册中心、配置中心、api网关那样独立部署,但是它几乎存在于每个spring cloud微服务中。包括feign提供的声明式服务调用也是基于该Ribbon实现
- Ribbon默认提供很多种负载均衡算法,例如 轮询、随机。甚至包含自定义的负载均衡算法
- 它解决并提供了微服务的负载均衡问题
负载均衡解决方案分类
-
集中式负载均衡
- 在consumer和provider之间使用独立的负载均衡设施(可以是硬件、如F5,也可以是软件,如nginx),由该设施负责把访问请求通过某种策略转发至provider
-
进程内负载均衡
- 将负载均衡逻辑集成到consumer,consumer从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的provider
Ribbon属于后者,是只是一个类库,继承与consumer进程,consumer通过它来获取到provide的地址
Ribbon七种负载规则
-
轮询策略(默认)RoundRobinRule
- 顺序轮询
-
权重轮询策略 WeightedResponseTimeRule
- 根据响应时间分配权重,响应时间越长权重越小,被选中的可能性越低。轮询策略开始后,每30秒收集一次
随机策略 RandomRule
最少并发数策略 BestAvailableRule
-
选定负载均衡策略基础上进行重试机制 RetryRule
- 负载A服务链接失败,会去重试其他服务
可用性敏感策略 AvailabilityFilteringRule
区域敏感性策略
配置文件设置:
provider-NAME(Eureka服务名称).ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
程序设置
@Bean
Public Rule ribbonRule(){
return new RandomRule();
}
点对点直联方式
- Pom 文件无需加载eureka
- 配置文件:
- ribbon.eureka.enabled=false //禁用eureka
- provider-NAME(provider服务名称).ribbon.listOfServers=192.168.10.61:8081 //指定provider服务器地址,可写多个地址逗号分隔