Nacos客户端启动出现9848端口错误分析(非版本升级问题)

一、背景

很多人Nacos客户端启动时,会报错如下,提示9848端口连接超时。

我自己也搜了搜,很多文章都说是版本问题,把客户端升级2.0就好了,但是我发现很多人升级之后还是会报这个错,网上找了半天都是让升级版本,好吧,网上没答案,只能自己分析了。

Nacos客户端启动出现9848端口错误分析(非版本升级问题)_第1张图片

二、分析源码

找到报错的地方 GrpcClient.serverCheck() 方法,然后打断点,重新启动,等执行完下面这一行,发现居然又不报错了,然后竟然启动成功了!

responseFuture.get(3000L, TimeUnit.MILLISECONDS);

反复试了几次,只要打断点就不报错,不打断点就报错。

Nacos客户端启动出现9848端口错误分析(非版本升级问题)_第2张图片

仔细研究了下,requestBlockingStub.request 是非阻塞请求,请求后直接进入

responseFuture.get(3000L, TimeUnit.MILLISECONDS) 方法里,这方法是判断上面的请求响应是否回来,大家可以看下里面的逻辑,大体上就是3秒超时时间之内,会循环判断响应是否返回,如果超时没有返回就抛出异常了。

Nacos客户端启动出现9848端口错误分析(非版本升级问题)_第3张图片Nacos客户端启动出现9848端口错误分析(非版本升级问题)_第4张图片

Nacos客户端启动出现9848端口错误分析(非版本升级问题)_第5张图片

这就是为什么打了断点之后,就不报错了,打了断点无形中增加了超时时间,在判断超时方法之前,响应已经返回了,自然不会报错了。

三、是否启动成功

大多数人,启动时报错之后,项目仍然启动成功了,nocas服务列表也已经有了,但是看到报错心里还是有点疑惑,真的就没问题吗?我们再分析一下,找找源头,报错的方法serverCheck,是从哪里开始调用的

一步一步追,找到本类的 connectToServer 方法Nacos客户端启动出现9848端口错误分析(非版本升级问题)_第6张图片

继续找调用connectToServer 方法的地方,定位到了RpcClient.class里的 start 方法

Nacos客户端启动出现9848端口错误分析(非版本升级问题)_第7张图片

Nacos客户端启动出现9848端口错误分析(非版本升级问题)_第8张图片发现,里面调用 connectToServer 时,返回null(就是前面报错后返回null),会重试三次,一般第二次就会连接成功了,会打印出 Success to connect to serveron start up

Nacos客户端启动出现9848端口错误分析(非版本升级问题)_第9张图片

所以大家启动报错后要看下,报错日志下面是否有成功日志,有成功日志就表示正常,没有问题。

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

你可能感兴趣的:(面试,学习路线,阿里巴巴,分布式,http,网络协议,开发语言,hdfs)