Ribbon负载均衡的使用与切换算法
Posted draymond
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ribbon负载均衡的使用与切换算法相关的知识,希望对你有一定的参考价值。
作用
客户端的负载均衡,与RestTemplate结合使用
1:pom
eureka的客户端与nocos的客户端pom依赖,都集成了ribbon,所以不再需要重复添加依赖
2:将RestTemplate注入到spring容i中
@Component @Configuration public class AppConfiguration { @LoadBalanced // 负载均衡 @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }
@LoadBalanced // 负载均衡 该注解标记使用负载均衡,不标记则会导致:客户端发现服务实例有多个,不知道调用哪一个的问题(默认使用轮询算法)
3:RestTemplate的使用
@Autowired private RestTemplate restTemplate; private String url = "http://CLOUD-PAYMENT-SERVICE"; //正式环境从配置文件中读取 @RequestMapping("/get/{id}") public BaseResult findById(@PathVariable("id") Integer id) { ResponseEntity<BaseResult> forEntity = restTemplate.getForEntity(url + "/payment/get/" + id, BaseResult.class); BaseResult body = forEntity.getBody(); return body; }
4:替换负载规则
4.1 负载均衡的策略
ribbon
负载均衡
步骤:
第一步:选择eurekaServer,他优先选择在同一区域内负载较少的server
第二步:根据用户指定的策略,从server取到的服务注册列表中选择一个地址
策略Irule:
RoundRobinRule
轮询
WeighedResponseTimeRule
响应速度快的实例选择权重大
RandomRule
随机
RetryRule
先按照RoundRobinRule策略获取,失败后会重试(重试试还是找本次获取的实例,还是找另一个??)
BestAvailableRule
过滤掉多次访问而处于短路器跳闸状态的服务,然后选择一个并发小的
ZoneAvoidanceRule
默认规则,符合判断server所在域的性能和server的可用性选择服务器
根据响应时间加权
替换负载规则
备注:自定义rebion不应该放到@ComponentScan下,否则会被所有的客户端共享,springBootApplication注解,默认带上@ComponentScan下
备注:eureka-client依赖,默认集成了ribbon
4.2 自定义负载均衡
@Configuration public class CloudRondowRule { @Bean public IRule iRule() { return new RandomRule(); //随机的规则 } }
main方法在springcloud包下,CloudRondowRule规则的定义在myRule包下,这样就不会扫描到了CloudRondowRule
5:标记客户端使用定义的负载均衡的切换规则
@EnableEurekaClient @SpringBootApplication @RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = CloudRondowRule.class) public class OrderMain80 { public static void main(String[] args) { SpringApplication.run(OrderMain80.class); } }
6:调用客户端的接口测试
以上是关于Ribbon负载均衡的使用与切换算法的主要内容,如果未能解决你的问题,请参考以下文章
springCloud:Ribbon实现客户端侧负载均衡-消费者整合Ribbon
客户端负载均衡Ribbon之二:Loadbalance的几种算法以及在ribbon中的使用
Spring Cloud Alibaba全家桶——微服务负载均衡器Ribbon与LoadBalancer