代码编织梦想

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)基础上,进行一定偏移量自动生成。

端口

与主端口的偏移量

描述

9848

1000

客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求

9849

1001

服务端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/egegerhn/article/details/125346501

spring cloud(十六):alibaba 之 nacos_呼吸的小鱼(李仕亮)的博客-爱代码爱编程

上个月最后一天的凌晨,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 maven 中央库发布了第一个版本。 目前 Spring Cloud Alibaba 还只能算是预览版吧,里边的坑肯定不少,不过我还是决定试试,看看 Alibaba 到底靠谱不靠谱。 Spring Cloud Alibaba

解决spring cloud alibaba/spring cloud整合zipkin后的报错问题_殷十娘的博客-爱代码爱编程

TIPS •本文服务发现组件以Nacos为例。 •本文基于 Spring Cloud Greenwich SR1 问题复现 依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-

阿里的nacos+springboot+dubbo2.7.3集成以及统一处理异常的两种方式-爱代码爱编程

在网上很多关于dubbo异常统一处理的博文,90%都是抄来抄去。大多都是先上一段dubbo中对于异常的统一处理的原码,然后说一堆的(甚至有12345,五种)不靠谱方案,最后再说“本篇使用的是方案4”,然后再对所谓的方案4写了一段文字,最后还说不清!!! 本篇解决方案不会那么罗里吧嗦也不会贴dubbo源码来凑字数,我就直接从刚结束不久的双11保卫战性能全链

冬日魔幻之旅-seata+dubbo+nacos+springboot解决分布式事务的全网段唯一实践之作(上)-爱代码爱编程

开篇 阿里把FESCAR开源了,开源后的名称叫SEATA。目前GIT上已经超1万3的星了。 可是笔者遍历全网段,无一篇是生产实用级说明同时GIT官网上的相关文档缺失以及Sample都太HelloWorld了,无法应用在真正的生产环境上。 于是笔者结合了在6,7年前那时在那个MQ年代来解决分布式事务的经验,结合这次的SEATA(最新一次COMMIT在2

spring cloud alibaba +seata 实战中问题总结-爱代码爱编程

1 找不到包:SeataDataSourceBeanPostProcessor java.lang.IllegalStateException: Error processing condition on io.seata.spring.boot.autoconfigure.SeataAutoConfiguration.globalTransaction

Nacos集群的CP架构,CAP原则与BASE原则的应用-爱代码爱编程

文章目录 1. CAP原则2. BASE原则3. CP架构是如何防止脑裂问题的4. Nacos的CP架构源码解析4.1 注册持久化服务,同步其他节点!4.2 Leader选举4.3 发送心跳5. 集群、分布式与微服务的区别 1. CAP原则         CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency

nacos注册中心源码解析(一)-爱代码爱编程

    说道源码解析,那就不得不把源码从git上下载下来,所以想要深入的童鞋一定要把源码给下载下来。 那么接下来就直接开始吧! 那么从哪开始呢?我们日常使用当然是启动nacos,然后在一个springboot配置中添加nacos服务发现的一个jar包,我们项目用的是2.2.3版本的 <dependency> <group

SEATA 1.4.x版本在MySQL8.0中执行undo时报错Cannot construct instance of `java.time.LocalDateTime`的原因及解决方法-爱代码爱编程

SEATA 1.4.x版本在MySQL8.0下DATETIME类型转换错误的问题 该BUG的官方修复补丁已经提交,并且合并到了1.5.0开发分支版本,可以尝试更新的最新的1.5.0版本来解决该问题,不过由于该目前尚未Release,所以请应用于生产环境。 Pull request:https://github.com/seata/sea

【错误解决】Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined.-爱代码爱编程

序:最近使用spring cloud alibaba遇了几个大坑,记录一下 1. 错误描述 今天用openfeign,报了一个就是标题所示这个错误 Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you fo

BUG集-汇总-爱代码爱编程

BUG集合: 一、异常:rg.springframework.web.client.HttpServerErrorException$InternalServerErro 项目场景: nacos 问题描述: 具体报错如下: rg.springframework.web.client.HttpServerErrorException$Intern

以源码运行nacos2.0.3报错-爱代码爱编程

加入nacos模块的源码运行时,报错: No enum constant com.fasterxml.jackson.annotation.JsonTypeInfo.Id.DEDUCTION; nacos版本2.0.3;解决方案直接看最后。 org.springframework.beans.factory.BeanDefinitionStoreExce

【无标题】liunx 搭建nacos2.0.3搭建集群的越到的Bug-爱代码爱编程

2.0的nacos 如果在一台服务器上搭建三台的话,首先是端口号,一台会占用三个端口号 2.0.3 用的nginx做的负载均衡一直报错 com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: at com.alibaba.nacos.client.namin

Nacos cluster is running with 1.X mode,can‘t accept gRPC request temporarily.-爱代码爱编程

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

nacos 2.0.3 集群客户端连接出现503 500异常处理 踩坑记录_com.alibaba.nacos.client.naming -爱代码爱编程

背景 LINUX 服务器:3台 NACOS 版本: 2.0.3 docker 数据库:无 springboot: 2.1.16.RELEASE com.alibaba.cloud:2.1.3.RELEASE 控制台可以正常