alibaba / spring-cloud-alibaba

Spring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware.
https://sca.aliyun.com
Apache License 2.0
27.47k stars 8.19k forks source link

springboot 项目启动时无法正常获取nacos config 远程配置文件 #3374

Closed mazimin closed 11 months ago

mazimin commented 11 months ago

nacos config

遇到问题: springboot 项目启动时无法正常获取nacos config 远程配置文件

debug 跟踪代码排查

  1. NacosConfigDataLoader.doLoad 一路跟踪到LocalConfigInfoProcessor.getFailoverFile 发现程序在本地读取了不存在文件,然后继续跟踪到RpcClient.request 方法 抛出异常 throw new NacosException(-401, "Client not connected, current status:" + this.rpcClientStatus.get()); image

image

image

image

  1. 我尝试在启动springboot项目时http 调用 nacos config 接口可以正常访问返回数据 image

  2. 然后我将 nacos_client 版本回退到1.4.1可以正常获取配置文件

4.版本 spring-boot.version:2.7.11 spring-cloud.version:2021.0.5 spring-cloud-alibaba.version:2021.0.5.0 nacos.client.version1.4.1:2.2.1

不回退nacos_client版本如何可以正确获取到配置

mazimin commented 11 months ago

nacos 版本 2.2.0

yuluo-yx commented 11 months ago

方便提供一个可以复现问题的最小example吗?方便社区同学复现并解决问题!

mazimin commented 11 months ago

https://github.com/mazimin/demo1 demo地址您看一下

yuluo-yx commented 11 months ago

https://github.com/mazimin/demo1 demo地址您看一下

namespace 配置有问题,可以直接指定命名空间的序列号或者是不指定,使用默认值

yuluo-yx commented 11 months ago

https://github.com/mazimin/demo1 demo地址您看一下

如下是我的测试结果:

2023-07-04 19:36:19.032  INFO 9952 --- [           main] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Listening config: dataId=demo1.yml, group=DEFAULT_GROUP
value:test

配置如下:

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        group: DEFAULT_GROUP
#        namespace: ${spring.profiles.active}
      config:
        group: DEFAULT_GROUP
#        namespace: ${spring.profiles.active}
        file-extension: yml
  config:
    import:
      - optional:nacos:${spring.application.name}.yml

启动类

    public static void main(String[] args) throws NacosException {
        SpringApplication.run(Demo1Application.class, args);
        NacosConfigManager bean = SpringUtils.getBean(NacosConfigManager.class);
        String default_group = bean.getConfigService().getConfig("demo1.yml", "DEFAULT_GROUP", 3000);
        System.out.println("value:" + default_group);
    }
mazimin commented 11 months ago

配置

# Spring
spring:
  application:
    # 应用名称
    name: demo1
  profiles:
    # 环境配置
    active: ${RUN_ENV:dev}

--- # nacos 配置
spring:
  cloud:
    nacos:
      # nacos 服务地址
      server-addr: 8848.gr55a24e.y8ki2rcl.a19d84.grapps.cn:80
      discovery:
        # 注册组
        group: DEFAULT_GROUP
        namespace: ${spring.profiles.active}
      config:
        # 配置组
        group: DEFAULT_GROUP
        namespace: ${spring.profiles.active}
        # 配置文件格式
        file-extension: yml
  config:
    import:
      - optional:nacos:${spring.application.name}.yml

启动类

@SpringBootApplication
public class Demo1Application {

    public static void main(String[] args) throws NacosException {
        SpringApplication.run(Demo1Application.class, args);
        NacosConfigManager bean = SpringUtils.getBean(NacosConfigManager.class);
        String default_group = bean.getConfigService().getConfig("demo1.yml", "DEFAULT_GROUP", 3000);
        System.out.println(default_group);
    }
}

这是我的namespace image 运行结果

2023-07-04 20:19:00.802  INFO 32120 --- [           main] com.example.demo.Demo1Application        : The following 1 profile is active: "dev"
2023-07-04 20:19:00.823  WARN 32120 --- [           main] c.a.c.n.c.NacosConfigDataLoader          : [Nacos Config] config[dataId=demo1.yml, group=DEFAULT_GROUP] is empty
2023-07-04 20:19:00.823 DEBUG 32120 --- [           main] c.a.c.n.c.NacosConfigDataLoader          : [Nacos Config] config[dataId=demo1.yml, group=DEFAULT_GROUP] content: 
null

只要一降client 版本就正常 升级回来 就无法获取

mazimin commented 11 months ago

将本地缓存的配置文件清空重新启动项目可以复现 image

yuluo-yx commented 11 months ago

不好意思,我没太理解您的问题? 是说,使用 nacos 的版本是 1.4 可以正常读取到配置。将 1.4 升级到 2.2 就没办法读取到配置了?

mazimin commented 11 months ago

不好意思,我没太理解您的问题? 是说,使用 nacos 的版本是 1.4 可以正常读取到配置。将 1.4 升级到 2.2 就没办法读取到配置了?

是的 升级之后启动时无法读取配置

yuluo-yx commented 11 months ago

不好意思,我没太理解您的问题? 是说,使用 nacos 的版本是 1.4 可以正常读取到配置。将 1.4 升级到 2.2 就没办法读取到配置了?

是的 升级之后启动时无法读取配置

用的sca和sb的版本没有相应升级吗?尽量去参考sca的版本说明去搭配组件使用,这些意料之外的问题,我们也没太多精力解决。至少在版本说明的版本情况下,我们的组件可以正常使用,你可以参考nacos配置中心的示例。

mazimin commented 11 months ago

不好意思,我没太理解您的问题? 是说,使用 nacos 的版本是 1.4 可以正常读取到配置。将 1.4 升级到 2.2 就没办法读取到配置了?

是的 升级之后启动时无法读取配置

用的sca和sb的版本没有相应升级吗?尽量去参考sca的版本说明去搭配组件使用,这些意料之外的问题,我们也没太多精力解决。至少在版本说明的版本情况下,我们的组件可以正常使用,你可以参考nacos配置中心的示例。

spring-boot.version:2.7.11 spring-cloud.version:2021.0.5 spring-cloud-alibaba.version:2021.0.5.0 nacos.client.version:2.2.0

这个是我的sca 和 sb 版本 都是按照 版本说明升级的 然后nacos server 2.2.1

yuluo-yx commented 11 months ago

不好意思,我没太理解您的问题? 是说,使用 nacos 的版本是 1.4 可以正常读取到配置。将 1.4 升级到 2.2 就没办法读取到配置了?

是的 升级之后启动时无法读取配置

用的sca和sb的版本没有相应升级吗?尽量去参考sca的版本说明去搭配组件使用,这些意料之外的问题,我们也没太多精力解决。至少在版本说明的版本情况下,我们的组件可以正常使用,你可以参考nacos配置中心的示例。

spring-boot.version:2.7.11 spring-cloud.version:2021.0.5 spring-cloud-alibaba.version:2021.0.5.0 nacos.client.version:2.2.0

这个是我的sca 和 sb 版本 都是按照 版本说明升级的 然后nacos server 2.2.1

你使用 nacos 版本是 1.4.x 也是这个配置吗?这个组件配置是没有问题的,可以参考示例 example

mazimin commented 11 months ago

sca 和 sb 版本就是按照官网文档配置的 配置完毕之后正常 更换了一个nacos server 之后才出现的这些问题 出现问题之后 其他版本没有变的情况下 只动了nacos client 版本 读取配置恢复正常 但是低版本的 nacos client又和dubbo 版本不兼容了

yuluo-yx commented 11 months ago

现在 sca 不推荐和dubbo一起使用了。 参考 https://github.com/alibaba/spring-cloud-alibaba/issues/2398 我们不保证除了版本说明之外的nacos版本的使用情况。降nacos版本,幅度这么大,肯定会有适配问题的,社区也保证不了正常使用

mazimin commented 11 months ago

现在 sca 不推荐和dubbo一起使用了。 参考 #2398 我们不保证除了版本说明之外的nacos版本的使用情况。降nacos版本,幅度这么大,肯定会有适配问题的,社区也保证不了正常使用

好的 感谢帮忙排查 我在去在继续按照版本对应调整一下 感谢

yuluo-yx commented 11 months ago

现在 sca 不推荐和dubbo一起使用了。 参考 #2398 我们不保证除了版本说明之外的nacos版本的使用情况。降nacos版本,幅度这么大,肯定会有适配问题的,社区也保证不了正常使用

好的 感谢帮忙排查 我在去在继续按照版本对应调整一下 感谢

不客气