diff --git a/pqs-common/common-microservice/src/main/java/com/njcn/microservice/compent/NacosWeightLoadBalanceRule.java b/pqs-common/common-microservice/src/main/java/com/njcn/microservice/compent/NacosWeightLoadBalanceRule.java new file mode 100644 index 000000000..bdc7a6f62 --- /dev/null +++ b/pqs-common/common-microservice/src/main/java/com/njcn/microservice/compent/NacosWeightLoadBalanceRule.java @@ -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; + } +} \ No newline at end of file diff --git a/pqs-common/common-microservice/src/main/java/com/njcn/microservice/config/RibbonConfig.java b/pqs-common/common-microservice/src/main/java/com/njcn/microservice/config/RibbonConfig.java new file mode 100644 index 000000000..74109d567 --- /dev/null +++ b/pqs-common/common-microservice/src/main/java/com/njcn/microservice/config/RibbonConfig.java @@ -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(); + } + + +}