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();
}
网友评论