nacos报错com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

一、问题描述

因为我们现在项目用的 nacos 做注册中心,后台开发想和前台开发做联调时,后台开发需要起多个服务,很麻烦,加上最近架构师在搞灰度发布,我这边就顺便利用他的这个灰度发布,来简化本地的联调方式,所以就需要把开发的服务注册到测试环境的 nacos 上,在启动服务的时候,出现了这个报错:com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

二、问题排查

首先看日志,因为我们使用的 k8s 部署,运维伙伴把 nacos 的8848端口映射出来是31048端口

image-20240112104856602

发现配置中的端口号和日志中的端口号不一致,日志中的多了1000,于是去看这句日志,在 com.alibaba.nacos.common.remote.client.grpc.GrpcClient#serverCheck

image-20240112105311181

所以在这里打上断点,想看看 port 属性是如何赋值的,最终在 com.alibaba.nacos.common.remote.client.grpc.GrpcClient#connectToServer 里找到

image-20240112105515089

可以看到,这个 port 在原本端口的基础上,增加了一个偏移量,这个 rpcPortOffset 方法点进去之后,会发现有两个实现

image-20240112105833758

走的是 com.alibaba.nacos.common.remote.client.grpc.GrpcSdkClient ,最终取的是 com.alibaba.nacos.api.common.Constants#SDK_GRPC_PORT_DEFAULT_OFFSET 这个常量,就是1000

image-20240112111108944

再去查阅官方文档,发现,nacos在2.0版本之后增加了 gRPC 的通讯方式,所以增加了端口,这个端口就是在主端口上增加一定的偏移量

image-20240112111334263

所以原因就是 nacos 的9848端口没有映射出来导致

三、解决问题

让运维伙伴增加了9848端口的映射32048端口,问题得到解决

四、后续

ps:虽然改完后,服务可以注册上去了,但是由于我们服务里有很多接口是需要通过 openFeign 去连别的服务的,本地服务想要连 k8s 集群里的服务,是连不上的,所以最后还是没有完成本地开发联调的优化,但是还是有学到东西的,如果有哪位大佬知道怎么解决,欢迎评论区指教。

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天进步亿点点的小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值