记一次nacos+loadbalance无法获取注册服务的问题
一、背景环境
1、maven 引用
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.12</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.12</version>
</dependency>引入以上依赖后nacos配置中心可以正常使用,nacos注册中心也能注册成功
启动类添加注解:@LoadBalancerClients(defaultConfiguration = MyLoadBalancerClientConfiguration.class) ,MyLoadBalancerClientConfiguration是自己写的负载均衡类
2、现象
- 引入了springcloud loadbalancer 和 feign
- 项目间调用的时候报错 No instances available for mscarservice ,其中mscarservice 是服务名
- nacos配置中心可以正常使用,nacos控制台展示正常
- nacos注册中心可以正常注册服务,nacos控制台可以正常展示注册的服务
二、产生原因
LoadBalancerClients无法获取nacos注册的服务列表,因为背景环境中的依赖中缺少 NacosLoadBalancer/NacosServiceInstance
三、解决
1、添加引用
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.5.0</version>
</dependency>- 这个引用里有需要的NacosLoadBalancer
- 正常情况不需要做其他任何配置,引用完就能解决
2、启动类添加 @LoadBalancerClients(defaultConfiguration = NacosLoadBalancerClientConfiguration.class)
- 如果方法1 无法解决,可以在启动类修改负载均衡类配置,可以强制使用NacosLoadBalancer
- 此方法同样需要引用方法1的依赖
3、自定义负载均衡
- 可以模仿NacosLoadBalancer 写一个自己的类,同样可以实现自己的负载均衡策略,又能够使用nacos的服务发现
- 此方法同样需要引用方法1的依赖
推荐loadbalancer原码解析:https://cloud.tencent.com/developer/article/2379812

浙公网安备 33010602011771号