天天看點

ribbon設定權重_擴充ribbon-支援nacos權重負載均衡

設定權重

ribbon設定權重_擴充ribbon-支援nacos權重負載均衡

java配置

package com.java.sa.content.config;

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.BaseLoadBalancer;

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;

@Slf4j

public class NacosWeightedRule extends AbstractLoadBalancerRule {

@Autowired

private NacosDiscoveryProperties discoveryProperties;

@Override

public Server choose(Object key) {

BaseLoadBalancer loadBalancer = (BaseLoadBalancer) getLoadBalancer();

String name = loadBalancer.getName();

try {

Instance instance = discoveryProperties.namingServiceInstance().selectOneHealthyInstance(name);

// log.info("選中的instance = {}", instance);

// instance轉server

return new NacosServer(instance);

} catch (NacosException e) {

log.error("發生異常", e);

return null;

}

}

@Override

public void initWithNiwsConfig(IClientConfig iClientConfig) {

}

}

package com.java.sa.content.config;

import com.netflix.loadbalancer.IRule;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class RibbonConfig {

@Bean

public IRule ribbonRule() {

return new NacosWeightedRule();

}

}

Hoxton就會有替代的實作