nacos配置实例权重不生效问题
踩坑记录
SpringCloudAlibaba + nacos + openfeign搭建的微服务测试环境,发现在nacos服务详情界面配置权重后,用postman调用本地服务,还是轮询调用,并没有按设置的权重来,把权重设置0又是生效的,设置为0的实例是不会被调用的。
网上查了各种资料都五花八门,很多都是简单提下配置,找了好久没一个好用的,大部分都是说要自定义负载均衡策略,不确定是不是版本问题
SpringCloud Naocs 提供的负载均衡策略
SpringCloud新版本中负载均衡器由原来的ribbon替换为Spring自己开发的Loadbalancer,默认只提供了2中负载均衡策略:RandomLoadBalancer 和 RoundRobinLoadBalancer。
SpringCloud Alibaba Nacos 2021.1版本提供了基于Nacos注册中心的轮询策略 NacosLoadBalancer 是基于权重的策略。
NacosLoadBalancer的权重策略默认是关闭的,如果要使用基于权重的负载策略要手动开启。
如果未给服务器设置权重,建议不要使用基于权重的策略,因为如果微服务的权重都相同,相当于随机
修改配置文件配置
#开启nacos的负载均衡策略 spring.cloud.loadbalancer.nacos.enabled=true
归根到底就是一个开关,但是网上答案五花八门找到一个回答到点子上的不容易,开启之后,调用服务的效果已经不是轮询了,而是按分配的权重来
POM依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>spring-cloud-alibaba-demo</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>order-service</module> <module>warehouse-service</module> <module>shop-service</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.13</version> <relativePath/> </parent> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <spring.cloud.alibaba.version>2021.0.5.0</spring.cloud.alibaba.version> <spring.cloud.version>2021.0.5</spring.cloud.version> </properties> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.25</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring.cloud.alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
最新评论