HSF HSFServiceAddressNotFoundException案列分析

简介: 项目组在阿里专有云V3.12上运行,使用EDAS taobao-tomcat Pandora容器及HSF作为RPC框架。在HSF Consumer尝试调用Provider时出现`HSFServiceAddressNotFoundException`异常,提示找不到目标服务地址。经检查,HSF服务配置正确,但通过Pandora QOS进一步诊断发现Provider状态为invalid。此状态通常意味着Consumer无法访问到Provider,通过telnet验证了这一情况。问题根源在于Consumer和Provider间的HSF端口不匹配导致网络不通。

背景介绍

项目组使用的是阿里专有云V3.12,系统运行在EDAS taobao-tomcat Pandora容器下,使用HSF作为RPC条用框架。

在HSF Consumer调用HSF Provider的时候,在HSF Consumer端抛出了如下异常:

2024-08-22 08:29:37.274||10.xx.xx.xx|SID=254|ERROR|RID=|TID=0ae3cba717242865772664949ddd72|CID=0|BK=|com.taobao.hsf.exception.HSFServiceAddressNotFoundException: HSFServiceAddressNotFoundException-
error message : [HSF-Consumer] can't find target service addresses, target serviceName:xx.xx.xx.xx.xx.xx.service.xx:2.0.0.daily Group:uat ERR-CODE: [HSF-0001], Type: [BIZ], More: [http://edas.console.aliyun.com/code?faq=HSF-0001]
  at com.taobao.hsf.registry.RegistryInvocationHandler.invoke(RegistryInvocationHandler.java:157)
  at com.taobao.hsf.invocation.DelegateInvocationHandler.invoke(DelegateInvocationHandler.java:12)
  at com.taobao.hsf.remoting.service.LocalInvocationHandler.invoke(LocalInvocationHandler.java:100)
  at com.taobao.hsf.invocation.filter.RPCFilterBuilder$TailNode.invoke(RPCFilterBuilder.java:165)
  at com.taobao.hsf2dubbo.context.DubboRPCContextClientFilter.invoke(DubboRPCContextClientFilter.java:43)
  at com.taobao.hsf.invocation.filter.RPCFilterNode.invoke(RPCFilterNode.java:71)
  at com.taobao.hsf.context.RPCContextClientFilter.invoke(RPCContextClientFilter.java:31)
  at com.taobao.hsf.invocation.filter.RPCFilterNode.invoke(RPCFilterNode.java:71)
  at com.taobao.hsf.rpc.generic.GenericInvocationClientFilter.invoke(GenericInvocationClientFilter.java:59)
  at com.taobao.hsf.invocation.filter.RPCFilterNode.invoke(RPCFilterNode.java:71)
  at com.taobao.hsf.remoting.service.InvocationValidationFilter.invoke(InvocationValidationFilter.java:48)
  at com.taobao.hsf.invocation.filter.RPCFilterNode.invoke(RPCFilterNode.java:71)
  at com.taobao.hsf.filter.QosClientFilter.invoke(QosClientFilter.java:67)
  at com.taobao.hsf.invocation.filter.RPCFilterNode.invoke(RPCFilterNode.java:71)
  at com.taobao.hsf.plugins.auth.AuthClientFilter.invoke(AuthClientFilter.java:49)

问题分析

从异常栈可知,抛出的异常是:HSFServiceAddressNotFoundException,造成该异常的原因通常是由于在Consumer端找不到要调用的HSF Service对应的target IP地址造成的,所以首先确认一下该HSF Service是否存在。

可以去阿里云EDAS控制台通过服务查询进行确认,如下:

通过对比,异常信息中的HSF Service名称,version、group与EDAS控制台查询结果一致,所以Consumer端HSF Service配置信息是正确的。

接下来,我们在Consumer所在ECS上通过Pandora QOS再进一步确认信息,操作步骤如下。

  1. 确认QOS端口号

/home/admin/edas-assist/edas-assist.pid文件内容如下:

PID:4124570
HSF PORT:12200
PANDORA QOS PORT:12201
MONITOR PORT:8006
CSP PORT:8719

其中PANDORA QOS PORT后面的端口号是QOS开放的端口号。

  1. 进入QOS控制台
// 进入QOS控制台
telnet localhost 12201
// 进入控制台后,切换到hsf module
cd hsf
  1. 查看HSF Service Address信息

从图中可知,Consumer调用的HSF Service Provider处于invalid状态。

为什么是invalid状态?

造成invalid的通常原因是Consumer访问不通该Provider,所以我们可以通过telnet进行验证。

从图中可知,Consumer无法访问Provider,造成该问题的原因通常有:

  1. Consumer与Provider之间网络不通
  2. Consumer访问的Provider端口号不通

所以,我们可以在Provider端通过/home/admin/edas-assist/edas-assist.pid查看HSF PORT是否与Consumer访问的一致来进行确认,通过对比Provider端HSF PORT确实与Consumer端访问的不一致,所以这个就是造成Consumer端查看HSF Service Address invalid的原因。

相关实践学习
微服务实战-服务注册中心 - Nacos
Nacos是阿里巴巴于2018年7月发布的一个开源项目,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 支持几乎所有主流类型的服务的发现、配置和管理: Kubernetes Service  gRPC & Dubbo RPC Service  Spring Cloud RESTful Service  
目录
相关文章
|
负载均衡 应用服务中间件 nginx
org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道
org.apache.catalina.connector.ClientAbortException: java.io.IOException: 断开的管道
1696 0
|
Arthas 监控 应用服务中间件
HSF Serialize response error on provider side
项目组的应用在HSF Consumer调用HSF Provider时遇到异常。问题源于HSF Provider端序列化响应数据时发生的错误,具体为`com.taobao.hsf.com.caucho.hessian.io.ContextSerializerFactory.getCustomSerializer`方法中的`Class.forName`调用抛出了`NullPointerException`。通过Arthas工具的`watch`命令监控并分析异常堆栈,发现异常发生在尝试获取自定义序列化器的过程中。
848 1
|
Java Spring
无法自动装配。找不到 ‘Service‘ 类型的 Bean。 Service 与 ServiceImpl 没有互相联系起来
文章讲述了一个Java开发中的问题,即Spring框架无法自动装配Bean,原因是ServiceImpl类未实现对应的Service接口,解决办法是让ServiceImpl实现Service接口。
2148 1
无法自动装配。找不到 ‘Service‘ 类型的 Bean。 Service 与 ServiceImpl 没有互相联系起来
|
存储 运维 Dubbo
HSF:阿里RPC框架
HSF:阿里RPC框架
4116 0
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
129146 0
|
开发工具 Android开发 git
解决Idea报错出现Git is not installed
解决Idea报错出现Git is not installed
4922 2
|
安全 Java 数据库连接
【Java】java.util.concurrent.ExecutionException异常
【Java】java.util.concurrent.ExecutionException异常
1155 0
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
1513 0
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
16527 6
|
Java API
【Java】已解决java.lang.NoSuchMethodException异常
【Java】已解决java.lang.NoSuchMethodException异常
1936 0