代码编织梦想

BUG背景

使用docker搭建nacos服务后,准备用java客户端连接nacos server的时候出现了如下问题,连接不上。(可能和大家的导致的问题不一样)

BUG日志

如下的报错可以看见gprc的字眼,咦,不是grpc吗,先不管那么多

com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: 
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:279) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:129) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:115) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:95) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:145) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:74) ~[spring-cloud-starter-alibaba-nacos-discovery-2.2.7.RELEASE.jar:2.2.7.RELEASE]
	at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:239) [spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]
	at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) [spring-cloud-starter-alibaba-nacos-discovery-2.2.7.RELEASE.jar:2.2.7.RELEASE]
	at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:138) [spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]
	at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:101) [spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]
	at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:88) [spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]
	at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) [spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:46) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:895) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:755) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:402) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1247) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1236) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at com.xt.nacosconsumer.NacosConsumerApplication.main(NacosConsumerApplication.java:37) [classes/:na]
Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected,current status:STARTING
	at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:655) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:635) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:269) ~[nacos-client-2.0.3.jar:na]
	... 32 common frames omitted

解决方案:

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口与主端口的偏移量描述
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步等

使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。
在这里插入图片描述

客户端拥有相同的计算逻辑,用户如同1.X的使用方式,配置主端口(默认8848),通过相同的偏移量,计算对应gRPC端口(默认9848)。

因此如果客户端和服务端之前存在端口转发,或防火墙时,需要对端口转发配置和防火墙配置做相应的调整。

客户端兼容性
Nacos2.0的服务端完全兼容1.X客户端。Nacos2.0客户端由于使用了gRPC,无法兼容Nacos1.X服务端,请勿使用2.0以上版本客户端连接Nacos1.X服务端。

Nacos2.0增加了9848,9849端口来进行GRPC通信,我需要在application.properties中额外配置吗?
不需要,这两个端口在Nacos2.0内部是通过8848+1000以及8848+1001这种偏移量方式计算出来的,不需要用户额外在配置文件中配置。但如果使用的是docker或存在端口转发方式启动,需要把这两个端口进行配置。

所以增加几个端口就行,因为我是docker部署的nacos,像使用本机搭建应该就不会出现我这样的问题。用服务器或者虚拟机搭建也会出现问题,端口要打开,这样就没有问题了。

在docker中启动时需加上端口映射
只要放开前两个端口,连接就没问题了,后面那个端口是用来服务间同步的,我们不需要映射到宿主机,因为最后那个端口是用来服务端之间交互的,也就是nacos集群,但他们都是部署在docker的虚拟网络中,他们之间端口都是可以互相通信的,所以不用管。

 -p 8848:8848 -p 9848:9848 

References:

  • https://nacos.io/zh-cn/docs/2.0.0-compatibility.html
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37774171/article/details/122636847

nacos 集群服务搭建踩坑记录_stupidzhang的博客-爱代码爱编程

前言: 因为了解到Eureka2.0及其部分组件闭源的消息, 项目架构选型时,注册中心组件选择了Nacos作为项目的注册中心,我负责搭建Nacos服务 本文所使用的是替换Eureka的Nacos,至于nacos是什么,想必看

我的学习之路:SpringCloud(Spring Boot)+nacos 配置中心 环境搭建(一)-爱代码爱编程

前言: 第一次写,这算是测试的,晚上重搭建项目开始一步步来------20191218 最近在看spring cloud,随手搭了个小demo(使用nacos作为服务注册中心),直接上代码: 项目结构 2. jar包: <dependency> <groupId>org.springframework.cloud&l

nacos-server配置中心连接数据库失败的解决方法-爱代码爱编程

在本地配置nacos时发现一直报数据库无法连接。错误信息类似这样: org.springframework.jdbc.cannotgetjdbcconnectionexception: failed to obtain jdbc connection; nested exception is org.apache.commons.dbcp.sqlneste

本地服务注册远程nacos遇到的坑,浏览器可以访问nacos控制页面,但本地服务无法注册-爱代码爱编程

我是将nacos部署到服务器上,然后将本地服务往远程nacos上注册,本地服务配置如下: spring: application: name: gateway1 profiles: active: dev cloud: nacos: config: server-addr: 远程IP:884

nacos注册服务失败_nacos 注册实例到server失败-爱代码爱编程

nacos server version: 1.4.0 能读取到配置,但是注册实例到nacos server就报错 [REGISTER-SERVICE] 16b4869a-06ed-45c3-9837-622ced825224 registering service dev@@wiz-account-service with instance: I

Nacos重启后微服务项目启动时后端出现NacosException: failed to req API异常解决办法-爱代码爱编程

有时候重启Nacos(大多数情况下是因为重启了机器),再启动微服务项目的服务时,后端控制台会出现NacosException: failed to req API异常。 解决办法: 现有两种解决办法可供参考:一、如果未做过特殊配置,直接删除(或重命名)protocol文件夹即可 protocol文件夹在安装目录的下列位置: ...\nacos-serve

nacos配置完成后启动项目报错:com.alibaba.nacos.api.exception.NacosException: null-爱代码爱编程

项目场景: 在使用springCloud的nacos进行配置统一管理时,我们需要把application配置文件上传至nacos配置中心,这就要求我们做一定的配置,将我们开发的项目和nacos配置中心关联起来。 如何进行nacos config配置,我这里就不多说了,这里简述我在配置完成后启动项目遇到的一个问题。 问题描述: 当配置完成后,启动项目,

com.alibaba.nacos.api.exception.NacosException: Request nacos server failed:-爱代码爱编程

com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClien

spring cloud alibaba 调用服务器nacos报错问题-爱代码爱编程

spring cloud alibaba 调用服务器nacos报错问题 spring cloud alibaba 2.2.7.RELEASE spring boot 2.2.13.RELEASE 2021-12-18 11:39:44.536 ERROR 26756 --- [ main] c.a.c.n.registry

nacos-server-2.0.4 启动部署失败问题(windows系统)-爱代码爱编程

基础准备 1.下载nacos-server-2.0.4.zip 地址:https://github.com/alibaba/nacos/releases/tag/2.0.4 2.执行sql文件nacos-mysql.sql,文件位于解压缩目录下nacos-server-2.0.4\nacos\conf 3.nacos-server-2.0.4\na