全部产品
云市场

错误 RPC-02306:无法获取 RPC 服务地址问题

更新时间:2020-02-18 09:25:28

问题现象

RPC 客户端调用服务时,收到如下错误:

RPC-02306: 没有获得服务 [{0}] 的调用地址,请检查服务是否已经推送

排查思路

检查服务地址是否推送

登录客户端,查看 /home/admin/logs/rpc/sofa-registry.log 日志,可以用服务接口名过滤日志找到最后一次推送记录。如果发现服务端地址没有推送到客户端,建议首选排查服务是否注册成功。

例如,以下日志中有 可调用目标地址[0]个 的记录,则说明 com.alipay.share.rpc.facade.SampleService 的服务端地址没有推送到客户端:

  1. RPC-REGISTRY - RPC-00204: 接收 RPC 服务地址:服务名[com.alipay.share.rpc.facade.SampleService:1.0@DEFAULT]
  2. 可调用目标地址[0]个

检查客户端启动时是否收到 RPC Config 推送

查看 /home/admin/logs/rpc/rpc-registry.log 日志,确定最近一次 RPC 客户端的启动时间。根据客户端上次启动时间和服务接口名过滤日志,检查对应的接口是否有 Receive Rpc Config info 的记录。如果没有也会导致后续无法调用服务,可以考虑重启客户端。

检查服务是否注册成功

登录 SOFA 应用中心 查看服务注册情况,或登录服务端查看 /home/admin/logs/confreg/config.client.log 日志。如果有服务发布相关的错误,可根据日志信息进一步排查。

检查服务调用是否早于地址推送时间

如果客户端日志 sofa-registry.log 显示服务地址已经推送,但是 RPC-02306 错误发生的时间在服务地址推送之前,这种情况多发生在业务系统自己通过定时任务或者在 bean 初始化完成后就开始调用服务,而此时客户端应用还没启动完成。此种情况可以通过配置如下 address-wait-time 解决。

配置项 描述 默认值
address-wait-time reference 生成时,等待服务注册中心将地址推送到消费方的时间。address-wait-time 的最大值为 30000 ms,超过这个值的配置将调整为 30000 ms。 0 (ms)

检查 RPC 服务端和客户端应用配置信息是否匹配

分别打开服务端和客户端应用的配置文件 application.properties,查看以下参数是否配置相同,如配置不同,RPC 客户端无法感知 RPC 服务端。

  • com.alipay.instanceid
  • com.antcloud.antvip.endpoint

检查服务注册中心连接

运行以下命令以检查客户端和服务端与服务注册中心的连接情况:

  1. netstat -a |grep 9600

9600 端口是服务注册中心的监听端口,客户端和服务端与 9600 端口建立长连接,向服务注册中心发布和订阅服务。如果客户端或者服务端与 9600 端口的连接断开,则需要重启应用恢复,并进一步排查端口异常断开的原因。

检查RPC服务端地址绑定

登录 RPC 服务端,运行以下命令:

  1. ps -ef|grep java

查看进程启动参数rpc_bind_network_interfacerpc_enabled_ip_range 是否绑定了正确的IP地址。