一、背景
很多人Nacos客户端启动时,会报错如下,提示9848端口连接超时。
我自己也搜了搜,很多文章都说是版本问题,把客户端升级2.0就好了,但是我发现很多人升级之后还是会报这个错,网上找了半天都是让升级版本,好吧,网上没答案,只能自己分析了。

二、分析源码
找到报错的地方 GrpcClient.serverCheck() 方法,然后打断点,重新启动,等执行完下面这一行,发现居然又不报错了,然后竟然启动成功了!
responseFuture.get(3000L, TimeUnit.MILLISECONDS);
反复试了几次,只要打断点就不报错,不打断点就报错。

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



Nacos客户端启动时常遇到9848端口连接超时错误,常见解决办法认为是版本升级,但并非总是有效。本文深入源码分析,发现在GrpcClient.serverCheck()方法中存在超时判断导致的问题。打过断点后,由于延长了超时时间,启动成功。实际上,即使报错,很多情况下项目依然能启动并正常工作,关键在于检查启动成功日志。提供Java开发学习资料,助力技能提升。
最低0.47元/天 解锁文章
2844

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



