踩坑记录
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>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论