当采用springboot2.3以上框架接入旧版本nacos时(1.X),会有“无包可用”的情况,要么因为高版本不兼容报错:
com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING异常
要么去连一个大了1000的端口,因为
1.当nacos客户端升级为2.1版本后,新增了gRPC的通信方式,新增了两个偏移量端口(9848,9849)在原端口(8848)基础上面偏移量1000和1001。
原端口:8848 ——》服务使用
偏移量端口1:9848 ——》客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
便宜连端口2:9849 ——》服务端gRPC请求服务端端口,用于服务间同步等
2. 开通相应服务端口:8848、9848、9849
以上为CSDN博主「ZWH@随笔」的原创文章,原文链接:https://blog.csdn.net/sevenmt/article/details/126847612
解决办法
maven中的依赖改为如下:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.1</version>
</dependency>
代码解释:
spring-cloud-starter-alibaba-nacos-discovery的版本可以指定2.0以上的版本,但是要排除其依赖的nacos-client,而指定采用nacos-client-1.4.1 ,这样就绕开了上面说明的nacos 2.0之后的多端口问题,从而兼容了nacos 1.X版本
最后附上nacos的相关配置:
application.yml中添加(配置部分没用到所以注释了,只放开了发现服务部分):
spring:
application:
name: myservice
profiles:
active: dev
cloud:
nacos:
# 配置中心
#config:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
#namespace: XXXXXXXXXXXXXXXXXXXXXXXXX
# nacos的ip地址和端口
#server-addr: 127.0.0.1:8848
#nacos登录用户名
#username: nacos
#nacos登录密码
#password: nacos
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
#file-extension: yaml
#config-retry-time: 300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
#shared-configs: blade.yaml
# 发布到注册中心 (如果没有使用可以不配)
discovery:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: XXXXXXXXXXXXXXXXXXXXXXXX
# nacos的ip地址和端口
server-addr: 127.0.0.1:8848
application启动类中添加:@EnableDiscoveryClient
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
public static void main(String[] args) {
Application.run(CommonConstant.APPLICATION_NAME, Application.class, args);
}
}