此文章描述本人参考Nacos官网以及一些博客文章,springboot项目转型springcloud时,在windows下搭建Nacos注册中心时遇到的坑,以作分享。
1、Nacos启动报错
进入Nacos官网置顶的Github下载链接后,在需要的Nacos版本中,找到 Assets 下的.tar.gz文件,点击即可下载。下载完成后解压进入bin目录下,双击点击startup.cmd,即可启动Nacos。出现下图日志则表示启动成功。

按照官网以及一些博客文章,完成以上步骤即可启动Nacos。
此时我却出现如下报错:
![]()
具体原因报错:
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:156)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391)
......(此处开始省略)
经过研究,解决方案为:
方法一:
编辑startup.cmd,将
set MODE="cluster"
改为
set MODE="standalone"
方法二:
用命令窗口,进入到安装路径的bin目录下,执行:
sh startup.sh -m standalone
报错原因:
因为当前电脑中Nacos没有配置集群模式,而是使用的单机模式,将MODE修改为standalone。使用cluster则会报错。
2、使用srringboot项目注册到nacos,启动时报错
将Springboot项目接入nacos,据一些博客文章所述,需要调整一下文件:
pom.xml 加入nacos相关依赖代码:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
</dependency>
项目配置文件加入nacos配置代码:(我把它写在了application.yml)
spring:
application:
name: first-server
cloud:
nacos:
discovery:
server-addr: ${NACOS_HOST:pigx-register}:${NACOS_PORT:8848}
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yml
NACOS_HOST: 127.0.0.1
启动类加入发现注册注解:
@EnableDiscoveryClient
启动。本以大功告成,结果问题还多着呢
问题一:
启动时报以下错误,导致无法启动
WARN 14272 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nacosConfigManager' defined in class path resource [com/alibaba/cloud/nacos/NacosConfigAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.cloud.nacos.NacosConfigManager]: Factory method 'nacosConfigManager' threw exception; nested exception is com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureException: java.lang.reflect.InvocationTargetException
原因:发现了 Nacos 的启动注解,却找不到 Nacos 的相关配置导致。导致出现在这样错误的原因是因为我吧相关配置写到了原有的 application.yml 配置文件里边。可能是加载顺序的问题,生成 nacosConfigProperties 时 application.yml 还没有读取。解决方法是新建 bootstrap.yml 文件,把 Nacos 相关配置放到 bootstrap.yml 里。因为 bootstrap.yml 的加载优先级高于 application.yml。
之后则顺利启动原先springboot项目啦。
此时产生新的问题,Nacos 却没有连接上。
问题二:
代码虽然顺利跑了起来,但是却出现报错,大意为 Nacos 连接出现了异常,具体报错如下:
ERROR 19068 --- [ main] c.a.cloud.nacos.discovery.NacosWatch : namingService subscribe failed, properties:NacosDiscoveryProperties{serverAddr='localhost:8848', endpoint='', namespace='', watchDelay=30000, logName='', service='', weight=1.0, clusterName='DEFAULT', group='DEFAULT_GROUP', namingLoadCacheAtStart='false', metadata={preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='192.168.1.108', networkInterface='', port=-1, secure=false, accessKey='', secretKey='', heartBeatInterval=null, heartBeatTimeout=null, ipDeleteTimeout=null}
java.lang.IllegalArgumentException: Param 'serviceName' is illegal, serviceName is blank
at com.alibaba.nacos.api.naming.utils.NamingUtils.getGroupedName(NamingUtils.java:47) ~[nacos-api-1.4.1.jar:na]
at com.alibaba.nacos.client.naming.NacosNamingService.subscribe(NacosNamingService.java:457) ~[nacos-client-1.4.1.jar:na]
at com.alibaba.cloud.nacos.discovery.NacosWatch.start(NacosWatch.java:123) ~[spring-cloud-starter-alibaba-nacos-discovery-2021.1.jar:2021.1]
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) [spring-context-5.3.3.jar:5.3.3]
......
看上去,没准又是配置的问题了。
经查阅一些博客之后终于弄明白原因。原来是spring-cloud-dependencies 2020.0.0 及之后版本不在默认加载 bootstrap 配置文件,如果需要加载 bootstrap 配置文件需要手动添加依赖。
解决方案:
pom.xml 中添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.0</version>
</dependency>
具体原因说明可参考文章:Param ‘serviceName‘ is illegal, serviceName is blank_wyz0923的博客-CSDN博客
至此,我的 Nacos 已经成功运行,并能成功发现我的服务,可在 http://127.0.0.1:8848/nacos 上面查验。
本文记录了在Windows环境下搭建Nacos注册中心过程中遇到的问题及其解决办法,并介绍了如何将Spring Boot项目与Nacos进行集成,包括解决启动过程中的配置错误。
&spm=1001.2101.3001.5002&articleId=122645833&d=1&t=3&u=39abd0da957b4833bd26ac2bb3dfb15e)
918

被折叠的 条评论
为什么被折叠?



