添加负载均衡操作

This commit is contained in:
2022-08-25 19:54:58 +08:00
parent 4be65353c9
commit 8e0ae10160
2 changed files with 63 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
package com.njcn.microservice.compent;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.ribbon.NacosServer;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
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 javax.annotation.Resource;
/**
* 自定义负载均衡算法
*/
public class NacosWeightLoadBalanceRule extends AbstractLoadBalancerRule {
@Override
public void initWithNiwsConfig(IClientConfig clientConfig) {}
@Resource
private NacosDiscoveryProperties nacosDiscoveryProperties;
@Override
public Server choose(Object key) {
// 1.获取服务的名称
BaseLoadBalancer loadBalancer = (BaseLoadBalancer) this.getLoadBalancer();
String serverName = loadBalancer.getName();
// 2.此时Nacos Client会自动实现基于权重的负载均衡算法
NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
try {
Instance instance = namingService.selectOneHealthyInstance(serverName);
return new NacosServer(instance);
} catch (NacosException e) {
e.printStackTrace();
}
return null;
}
}

View File

@@ -0,0 +1,22 @@
package com.njcn.microservice.config;
import com.netflix.loadbalancer.IRule;
import com.njcn.microservice.compent.NacosWeightLoadBalanceRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author hongawen
* @version 1.0.0
* @date 2022年08月25日 19:53
*/
@Configuration
public class RibbonConfig {
@Bean
public IRule getLoadBalancerRule(){
return new NacosWeightLoadBalanceRule();
}
}