HSF HSFServiceAddressNotFoundException案列分析

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
容器镜像服务 ACR,镜像仓库100个 不限时长
可观测监控 Prometheus 版,每月50GB免费额度
简介: 项目组在阿里专有云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的原因。

相关实践学习
通过EDAS实现K8s微服务应用的金丝雀发布
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ACK Serverless,体验微服务应用的部署、访问和高级发布能力。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas 
目录
相关文章
|
7月前
|
消息中间件 网络协议 算法
流量回放工具之 goreplay 核心源码分析
【6月更文挑战第3天】流量回放工具之 goreplay 核心源码分析
175 3
|
8月前
|
算法 NoSQL 应用服务中间件
你们公司用的限流方案,可以讲讲吗
面试官:听说你是公司技术一号位,那我就考考你吧😊。对于ip的限流,我们是直接使用了Nginx的限流,Nginx的limit_req_zone可以设置每个IP地址在单位时间内所允许发起的请求数。
|
8月前
|
API Nacos
【想进大厂还不会阅读源码】ShenYu源码-重构同步数据服务
ShenYu源码阅读📚。我们看下PR的标题和Concersation的头一句,大概意思就是重构注册中心数据同步到ShenYu网关的方式。大家看看重构了有没好处呢?不仅获得了知识,还获得了一次开源贡献,何乐而不为呢
|
8月前
|
监控 Dubbo 测试技术
如何做好一次服务接口压测?
如何做好一次服务接口压测?
107 0
|
8月前
|
缓存 负载均衡 Dubbo
从源码全面解析 dubbo 消费端服务调用的来龙去脉
从源码全面解析 dubbo 消费端服务调用的来龙去脉
|
机器学习/深度学习 缓存 SpringCloudAlibaba
假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!
五一假期过的可真快,今天开始,又要搬砖了。在五一假期当中,冰河做了一项调研,感觉结果还是挺合乎情理的。
387 0
假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!
|
XML Dubbo IDE
【Dubbo3终极特性】「流量治理体系」一文教你如何通过Dubbo-Admin实现动态进行流量隔离机制
【Dubbo3终极特性】「流量治理体系」一文教你如何通过Dubbo-Admin实现动态进行流量隔离机制
313 0
【Dubbo3终极特性】「流量治理体系」一文教你如何通过Dubbo-Admin实现动态进行流量隔离机制
|
负载均衡 监控 前端开发
(十一)、OpenFegin服务调用
(十一)、OpenFegin服务调用
|
存储 数据采集 监控
实操讲解:微服务全链路调用监控(一)|学习笔记
快速学习实操讲解:微服务全链路调用监控(一)
555 0
实操讲解:微服务全链路调用监控(一)|学习笔记