扩展Ribbon支持Nacos权重

2021-03-11  本文已影响0人  G__yuan

1.基于nacos client 的权重负载均衡算法来实现,编写如下类

public class NacosWeightedRule extends AbstractLoadBalancerRule {

    @Autowired
    private NacosDiscoveryProperties nacosDiscoveryProperties;

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
        //读取配置文件,并初始化NacosWeightedRule
    }
    @Override
    public Server choose(Object o) {
        BaseLoadBalancer loadBalancer = (BaseLoadBalancer) this.getLoadBalancer();
        //获取想要请求的服务名称
        String name = loadBalancer.getName();
        //拿到服务发现的相关api
        NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();

        Instance instance = null;
        try {
            //nacos client自动通过基于权重的负载均衡算法,返回一个实例
             instance = namingService.selectOneHealthyInstance(name);
        } catch (NacosException e) {
            e.printStackTrace();
        }
        return new NacosServer(instance);
    }
}

2.将项目中的ribbon的负载均衡规则替换成自己编写NacosWeightedRule,至于是否全局使用,还是针对某个微服务使用,根据具体情况,以及结合“Spring Cloud Ribbon使用”该篇文章中内容进行配置。

  @Bean
    public IRule ribbonRule(){
        return new NacosWeightedRule();
    }
上一篇下一篇

猜你喜欢

热点阅读