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();
        }
    
    }
  • 相关阅读:
    php and web service with wsdl
    QT creator出现 no executable specified时解决办法
    ECShop 2.x 3.0代码执行漏洞分析
    关于QtCharts中的映射器与模型的使用
    QT 异步函数转为同步函数的方法
    Win7+Qt5.6.0(64位)+msvc2015编译器 环境配置
    SMTP用户枚举原理简介及相关工具
    Android系统广播机制存在漏洞,恶意软件可绕过安全机制跟踪用户
    Qt 维护工具MaintenanceTool.exe 使用
    漏洞预警 | ECShop全系列版本远程代码执行高危漏洞
  • 原文地址:https://www.cnblogs.com/517cn/p/13817553.html
Copyright © 2011-2022 走看看