Ribbon使用

Ribbon :处理客户端负载均衡和容错的解决方案

配置Ribbon的负载均衡

Rule接口: 定义客户端负载均衡的规则

  • RandomRule :随机选择
  • RoundRobinRule
  • ZoneAvoidanceRule

在这里插入图片描述

配置ribbon的负载均衡策略

  • 在配置文件中配置
user-center:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
  • 在java代码中配置
/**
 *
 * 不同的服务使用不同的ribbon策略
 * @RibbonClient : 表示这个配置是为xxx服务的
 *
 */
//@Configuration
//@RibbonClient(name = "user-center",configuration = RibbonConfiguration.class)
    // 全局服务设置
    @RibbonClients(defaultConfiguration = RibbonConfiguration.class)
public class UserCenterRibbonConfiguration {
   
}

如果是为某个微服务单独配置负载均衡策略 @RibbonClient 指定配置文件的位置,,,这个配置文件不能被springboot扫描到,,父子上下文环境,,就像spring和springmvc的环境,,不能重叠,,如果重叠,相当于会变成全局的配置

Ribbon的配置文件

@Configuration
public class RibbonConfiguration {
   
    @Bean
    public IRule ribbonRule(){
   
        // 负载均衡策略为随机
//        return new RandomRule();

        // 根据权重      这个类是自己写的根据权重判断
        return new NacosWeightedRule();
    }

    /**
     * 配置 ping的规则
     * @return
     */
    @Bean
    public IPing ping(){
   
        return new PingUrl();
    }
}

写自己的负载均衡算法:
继承AbstractLoadBalancerRule , 实现里面的 choose()方法:

/**
 *
 * nacos自带的   根据权重的负载均衡策略,,,,    需要配置在ribbon的负载均衡中
 */
@Slf4j
public class NacosWeightedRule extends AbstractLoadBalancerRule {
   

    @Autowired
    NacosDiscoveryProperties nacosDiscoveryProperties;


    /**
     * 初始化规则,, 获取配置信息,,以便在choose中使用
     * @param clientConfig
     */
    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {
   

    }

    /**
     * 返回与该规则关联的负载均衡器,,, 负载均衡器维护了服务实例列表
     * @return
     */
    @Override
    public ILoadBalancer getLoadBalancer() {
   
        return super.getLoadBalancer();
    }

    /**
     * 选择一个服务实例来处理请求,,,   在这个方法中实现自己的负载均衡策略
     * @param key
     * @return
     */
    @Override
    public Server choose(Object key) {
   
        try {
   
            /**
             * BaseLoadBalancer :  基本的负载均衡策略:  比如:轮询(round robin),随机选择(Random),,,
             */
            BaseLoadBalancer loadBalancer = (BaseLoadBalancer) this.getLoadBalancer();

            // 想要请求的微服务的名称
            String name = loadBalancer.getName();

            // 负载均衡算法,,,     nacos内置了基于权重的算法
            NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();

            // nacos client 自动通过基于权重的负载均衡算法,给我们一个实例
            Instance instance = namingService.selectOneHealthyInstance(name);

            log.info("port = {},instance = {}",instance.getPort(),instance);


            return new NacosServer(instance);
        } catch (NacosException e) {
   
            throw new RuntimeException(e);
        }
    }
}

在nacos中设置的权重就会生效:

在这里插入图片描述

用到的类

ILoadBalancer : 是 netflix ribbon中负责管理服务实例列表提供负载均衡策略的核心接口

  • getAllServers() 返回当前负载均衡器中维护的所有服务实例的列表
  • addServers() 向负载均衡器中添加service
  • chooseServer() : 根据负载均衡规则,选择一个实例来处理请求

相关推荐

  1. Ribbon

    2023-12-17 05:36:05       20 阅读
  2. 如何使用springcloud LoadBalancer代替ribbon

    2023-12-17 05:36:05       19 阅读
  3. 浅谈Spring Cloud Ribbon原理及其使用方法

    2023-12-17 05:36:05       19 阅读
  4. springcloud==ribbon

    2023-12-17 05:36:05       38 阅读
  5. Ribbon 策略

    2023-12-17 05:36:05       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 05:36:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 05:36:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 05:36:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 05:36:05       20 阅读

热门阅读

  1. K8S(六)—kubectl

    2023-12-17 05:36:05       38 阅读
  2. kafka3.0创建topic出现zookeeper is not a recognized option

    2023-12-17 05:36:05       43 阅读
  3. ZooKeeper

    ZooKeeper

    2023-12-17 05:36:05      45 阅读
  4. Python基础03-循环结构

    2023-12-17 05:36:05       34 阅读
  5. NPM的介绍及使用详解

    2023-12-17 05:36:05       41 阅读
  6. git常用命令

    2023-12-17 05:36:05       42 阅读
  7. git各分支简介

    2023-12-17 05:36:05       39 阅读
  8. 开源的Spring Boot学习资源

    2023-12-17 05:36:05       32 阅读
  9. 计算机网络高频判断题

    2023-12-17 05:36:05       34 阅读
  10. 嵌入式应用中的复选框控件实现

    2023-12-17 05:36:05       43 阅读
  11. 服务总线SpringCloudBus

    2023-12-17 05:36:05       41 阅读
  12. pytorch代码管理

    2023-12-17 05:36:05       26 阅读
  13. 2024 年 QA 自动化的语言是什么?

    2023-12-17 05:36:05       45 阅读
  14. illuminate/database 使用 五

    2023-12-17 05:36:05       35 阅读