zoukankan      html  css  js  c++  java
  • spring cloud 实现基于Nacos权重的负载均衡

    package com.water.step.service.user.nacos;
    
    import com.alibaba.nacos.api.exception.NacosException;
    import com.alibaba.nacos.api.naming.pojo.Instance;
    import com.netflix.client.config.IClientConfig;
    import com.netflix.loadbalancer.AbstractLoadBalancerRule;
    import com.netflix.loadbalancer.DynamicServerListLoadBalancer;
    import com.netflix.loadbalancer.Server;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties;
    import org.springframework.cloud.alibaba.nacos.ribbon.NacosServer;
    
    /**
     * 基于Nacos权重的负载均衡
     *
     * @Author Administrator
     * @create 2020/10/14 20:54
     */
    @Slf4j
    public class NacosWeightLoadBalancerRule extends AbstractLoadBalancerRule {
    
        @Autowired
        private NacosDiscoveryProperties nacosDiscoveryProperties;
    
        @Override
        public void initWithNiwsConfig(IClientConfig iClientConfig) {
            // 读取配置文件,并初始化NacosWeightLoadBalancerRule
        }
    
        @Override
        public Server choose(Object o) {
            DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer) getLoadBalancer();
            // 请求的微服务名称
            String applicationName = loadBalancer.getName();
            try {
                // nacos 通过基于权重的负载均衡算法,算出一个健康的服务实例以供调用
                Instance instance = nacosDiscoveryProperties.namingServiceInstance().selectOneHealthyInstance(applicationName);
                return new NacosServer(instance);
            } catch (NacosException e) {
                log.error("获取服务实例异常:{}", e.getMessage());
            }
            return null;
        }
    }

    局部配置:调用指定服务提供的服务时,使用基于Nacos权重的负载均衡算法

    下面以调用为step-service-order的微服务请求为例:

    在application.yaml文件中新增以下代码:

    # 被调用的微服务名
    step-service-order: ribbon:
    # 指定使用Nacos提供的基于权重的负载均衡 NFLoadBalancerRuleClassName: com.water.step.service.user.nacos.NacosWeightLoadBalancerRule

    全局配置:调用其他微服务,一律使用基于Nacos权重的负载均衡算法

    package com.water.step.service.user.nacos;
    
    import com.netflix.loadbalancer.IRule;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class RibbonConfiguration {
    
        @Bean
        public IRule ribbonRule() {
            return new NacosWeightLoadBalancerRule();
        }
    
    }
  • 相关阅读:
    USB Device Finder
    Delphi Interfaces
    Why we need interfaces in Delphi
    PostQuitMessage, PostThreadMessage( WM_QUIT )
    state与status的区别
    SQLSERVER监控复制并使用数据库邮件功能发告警邮件
    干货分享:SQLSERVER使用裸设备
    SQLSERVER truncate table之后是否会重置表的自增值
    配置SQL Server去使用 Windows的 Large-Page/Huge-Page allocations
    SQLSERVER 数据库性能的的基本
  • 原文地址:https://www.cnblogs.com/517cn/p/13817553.html
Copyright © 2011-2022 走看看