问题描述:

nacos既可以作为注册中心,也可以作为动态配置中心。使用nacos作为动态配置中心时,项目启动报错。当时我是把nacos的注册中心连接配置也交给了nacos管理。只在项目中写了bootstrap.yml,根据里面的配置去拉取下来再往nacos中注册。我在启动微服务项目的时候,报错:NacosException: failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848]。

问题分析:

这个报错网上说是没有开启nacos的原因,服务发起注册的时候找不到nacos。但是,我肯定开启了nacos服务器的。下面开始排查问题,排查了好久,发现localhost:8848不简单啊。我的nacos服务器是有ip的,在远程服务器上,为什么我的微服务要去localhost:8848这个地址注册呢。想了好久,才想明白。我的微服务中没有导入nacos作为配置中心的依赖,虽然项目中有bootstrap.yml文件,也写了去哪里拉取其他配置,但是没有导入配置中心的依赖是不可能去拉取配置的,所以微服务只能向默认的nacos地址注册,也就是localhost:8848。这是一个很低级的错误,微服务中根本就没有导入nacos作为配置中心的依赖,只导入了作为注册中心的依赖。

解决方案:

添加nacos作为配置中心的依赖就好了,项目启动后,会根据bootstrap.yml文件中的拉取地址拉取配置。没有导入nacos配置中心的依赖是不可能去拉取配置的。下面附上nacos作为注册中心和配置中心的maven依赖

 		<!--引入nacos 注册中心依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--引入nacos config配置依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐