记一次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、现象

  1. 引入了springcloud loadbalancer 和 feign
  2. 项目间调用的时候报错 No instances available for mscarservice ,其中mscarservice 是服务名
  3. nacos配置中心可以正常使用,nacos控制台展示正常
  4. 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. 如果方法1 无法解决,可以在启动类修改负载均衡类配置,可以强制使用NacosLoadBalancer
  2. 此方法同样需要引用方法1的依赖

3、自定义负载均衡

  1. 可以模仿NacosLoadBalancer 写一个自己的类,同样可以实现自己的负载均衡策略,又能够使用nacos的服务发现
  2. 此方法同样需要引用方法1的依赖

推荐loadbalancer原码解析:https://cloud.tencent.com/developer/article/2379812

posted @ 2025-08-17 21:57  pk.com.cn  阅读(19)  评论(0)    收藏  举报