个人随笔
目录
二、springCloudAlibaba-Ribbon的简单使用
2023-10-25 20:54:22

在上一篇笔记中,我们搭建了nacos的环境,然后默认负载均衡就是Ribbon的轮询策略,这里大概介绍Ribbon,暂时就不去深究原理啦,只要会用就可以了,环境搭建参考:一、springCloudAlibaba-nacos环境搭建

1、Ribbon的作用

Ribbon提供了客户端的负载均衡能力,并且提供了多种负载均衡算法,如下

策略名 策略描述 实现说明
BestAvailableRule 选择一个最小的并发请求的server 逐个考察Server,如果Server被tripped了,则忽略,在选择其中ActiveRequestsCount最小的server
AvailabilityFilteringRule 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(activeconnections 超过配置的阈值) 使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态
WeightedResponseTimeRule 根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。 一个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。Weight的计算也比较简单responsetime 减去每个server自己平均的responsetime是server的权重。当刚开始运行,没有形成statas时,使用roubine策略选择server。
RetryRule 对选定的负载均衡策略机上重试机制。 在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
RoundRobinRule 轮询方式轮询选择server 轮询index,选择index对应位置的server
RandomRule 随机选择一个server 在index上随机,选择index对应位置的server
ZoneAvoidanceRule 复合判断server所在区域的性能和server的可用性选择server 使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于过滤掉连接数过多的Server。

Ribbon默认的负载均衡策略是轮询。

2、使用

只需要加上@LoadBalanced注解即可

  1. @Bean
  2. @LoadBalanced
  3. public RestTemplate restTemplate(RestTemplateBuilder builder){
  4. return builder.build();
  5. }

3、策略修改

1、代码方式

新建一个配置类,注意配置类不能陪在SpringBootApplication注解能扫描得到的目录

  1. package com.suibibk.springCloud.ribbon;
  2. import com.netflix.loadbalancer.IRule;
  3. import com.netflix.loadbalancer.RandomRule;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class RibbonRandomRuleConfig {
  8. @Bean
  9. public IRule iRule(){
  10. return new RandomRule();
  11. }
  12. }

然后启动类,指定调用哪一个服务用该负载均衡算法

  1. package com.suibibk.springCloud.order;
  2. import com.suibibk.springCloud.ribbon.RibbonRandomRuleConfig;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.boot.web.client.RestTemplateBuilder;
  6. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  7. import org.springframework.cloud.netflix.ribbon.RibbonClient;
  8. import org.springframework.cloud.netflix.ribbon.RibbonClients;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.web.client.RestTemplate;
  11. @SpringBootApplication
  12. @RibbonClients(value = {
  13. @RibbonClient(name = "stock-service",configuration= RibbonRandomRuleConfig.class)
  14. })
  15. public class OrderApplication {
  16. public static void main( String[] args ) {
  17. SpringApplication.run(OrderApplication.class,args);
  18. }
  19. @Bean
  20. @LoadBalanced
  21. public RestTemplate restTemplate(RestTemplateBuilder builder){
  22. return builder.build();
  23. }
  24. }
2、配置文件方式

在配置文件加上配置即可

  1. #被调用的服务名
  2. stock-service:
  3. ribbon:
  4. #指定负载均衡策略
  5. NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

比如订单调用库存stock-service服务,那么配置文件变为下面的样子

  1. server:
  2. port: 8012
  3. spring:
  4. application:
  5. name: order-service
  6. cloud:
  7. nacos:
  8. server-addr: 127.0.0.1:8848
  9. discovery:
  10. username: nacos
  11. password: nacos
  12. namespace: public
  13. #被调用的服务名
  14. stock-service:
  15. ribbon:
  16. #指定负载均衡策略
  17. NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

其他什么都不用改!

 46

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2