HSF 开发

article/2025/10/21 6:39:21

 

HSF 简介 HSF(High Speed Service Framework),高速服务框架,是阿里-主要采用的服务框架,其目的是 作为桥梁联通不同的业务系统,解耦系统之间的实现依赖。

1: RPC 远程过程调用(Remote Procedure Call)是一种通过网络从远程计算机程序上请求服务的协 议,它的特点在于不需要了解底层网络技术。在 OSI 网络通信模型中,RPC 跨越了传输层和 应用层。RPC 使得开发分布式应用更加容易

2: ConfigServer(地址注册中心) HSF 是一个 RPC 框架,服务端需要将地址发送到注册中心让客户端能够进行服务发现,客 户端需要通过注册中心订阅一个服务的地址。服务与地址的对应关系是多对多的关系,一个 服务可以由多个地址提供,一      个地址可以提供多种服务。当一个服务有了新地址(机器)或 者减少了地址(机器)时,注册中心会通知这个服务的订阅方将地址增加或者减少,这个注 册中心就是 Configserver,它负责存储地址信息以及地址变更的推送。

3: Diamond(配置中心) HSF 持久化的配置中心是 Diamond。HSF 提供软负载服务,其中的路由规则是在 Diamond 上 进行配置,然后推送到客户端进行解析,第二章节中开发环境搭建已经包含 Diamond。

4: Pandora Pandora 是 HSF 生存的容器,由 pandora 来管理整个 HSF 的生命周期和二方包的隔离

HSF 标签清单

Provider 配置:

属性描述
interfaceinterface 必须配置[String],为服务对外提供的接口
versionversion 为可选配置[String],含义为服务的版本,默认为 1.0.0
groupserviceGroup 为可选配置[String],含义为服务所属的组别,以便按 组别来管理服务的配置,默认为 HSF
clientTimeout该配置对接口中的所有方法生效,但是如果客户端通过 MethodSpecial 属性对某方法配置了超时时间,则该方法的超时时间以客户端配置为准,其他方法不受影响,还是以服务端配置为 准
serializeTypeserializeType 为可选配置[String(hessian|java)],含义为序列化类 型,默认为 hessian
corePoolSize单独针对这个服务设置核心线程池,是从公用线程池这个大蛋糕 里切一块下来
maxPoolSize单独针对这个服务设置线程池,是从公用线程池这个大蛋糕里切 一块下来
enableTXC开启分布式事务 Txc
refref 必须配置[ref],为需要发布为 HSF 服务的 spring bean id
methodSpecialsmethodSpecials 为可选配置,用于为方法单独配置超时(单位 ms), 这样接口中的方法可以采用不同的超时时间,该配置优先级高于 上面的 clientTimeout 的超时配置,低于客户端的 methodSpecials 配置

 

 

 

 

 

 

 

 

 

 

 

标签配置示例: 

 

Consumer 配置 :

属性描述
interfaceinterface 必须配置[String],为需要调用的服务的接口。
versionversion 为可选配置[String],含义为需要调用的服务的版本,默认为 1.0.0
groupgroup 为可选配置[String],含义为需要调用的服务所在 的组,默认为 HSF,建议配置。
methodSpecialsmethodSpecials 为可选配置,含义为为方法单独配置超时 (单位 ms),这样接口中的方法可以采用不同的超时时间, 该配置优先级高于服务端的超时配置。
target主要用于单元测试环境和 hsf.runmode=0 的开发环境中, 在运行环境下,此属性将无效,而是采用配置中心推送回 来的目标服务地址信息。
connectionNumconnectionNum 为可选配置,含义为支持设置连接到 server 连接数,默认为 1,在小数据传输,要求低延迟的情况下设 置多一些,会提升 tps。
clientTimeout客户端统一设置接口中所有方法的超时时间(单位 ms),超 时设置优先级由高到低是:客户端 MethodSpecial,客户端 接口级别,服务端 MethodSpecial,服务端接口级别。
asyncallMethods

asyncallMethods 为可选配置[List],含义为调用此服务时需 要采用异步调用的方法名列表以及异步调用的方式。

默认为空集合,即所有方法都采用同步调用。

maxWaitTimeForCsAddress配置这个,在服务订阅的时候,会在指定的时间内,等待 地址推送过来,避免地址为过来后,调用该服务出现找不 到地址的情况,超过指定时间未等到地址,将继续初始化 完成。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签配置示例: 

 

HSF jvm 参数配置

-Dhsf.server.port

指定 HSF 的启动服务绑定端口,默认为 12200

-Dhsf.serializer

指定 HSF 的序列化方式,默认值为 hessian

-DdefaultHsfClientTimeout

指定 HSF 的客户端超时时间 ms,默认为 3000

-Dhsf.server.max.poolsize

指定 HSF 的服务端最大线程池大小,默认值为 600

-Dhsf.server.min.poolsize 指定 HSF 的服务端最小线程池大小。默认值为 50

 

HSF 基础开发

参考下面的 demo 编写示例,来快速的开发一个基础版的 HSF 应用

1 创建 Web 项目

通过上面第一、二章节我们已经在开发工具中配置好对应的插件,并且搭建了本地服务注册 配置中心,下面我们以一个 demo 展开介绍 Hsf 开发的相关细节。

以 eclipse 为例创建一个 maven web 项目。

请点击 File -> New -> Project -> Maven Project -> maven-archetype-webapp ,在弹 出的界面输入 groupId、artifactId ,然后连续点击 Next,完成项目创建。项目目录结构 如图:

2 添加 Maven 依赖

在项目 pom.xml 中添加如下依赖:

3 编写发布 HSF 的服务

创建需要发布的服务接口:com.alibaba.edas.SampleService

编写实现类:com.alibaba.edas.impl.SampleServiceImpl

4 发布服务配置文件

请按照以下步骤配置发布者的服务配置文件。

  1. 在 web.xml 中配置 spring 的监听器:

  

  2. 在 resources 目录下面添加 spring 配置文件:application-config.xml

    

  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

<import resource="hsf-provider-beans.xml"/>
<!--<import resource="hsf-consumer-beans.xml"/>-->

  </beans>

  3. 在 resources 目录下面添加发布者的配置文件:hsf-provider-beans.xml

  <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:hsf="http://www.taobao.com/hsf"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.taobao.com/hsf
http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName">

  <bean id="stationService" class="com.sgcc.echarge.stationserver.service.StationServiceHsfImpl"/>
   <hsf:provider version="1.0.0" group="grp_sgcc_xpcz_app" ref="stationService"
id="stationSP" interface="com.sgcc.echarge.proxy_hsfapi.station.iface.StationService"/>

  </beans>

  到此发布者就编写好了。

4. 右键点击创建的项目,点击 Run As,选择 Run configuration,在弹出页面选择 AliTomcat Webapp, 右键 new 新建,如下图:

  

5. 填写好相关配置,点击 Run,启动应用,此时通过第二章节建的配置中心可以看到发布 的服 务,如下图:

   

5 消费服务配置文件

1. 在配置文件 application-config.xml 添加消费者配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<import resource="hsf-consumer-beans.xml"/>

</beans>
2. 在 resources 目录下面添加消费者的配置文件 hsf-consumer-beans.xml 配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:hsf="http://www.taobao.com/hsf"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.taobao.com/hsf
http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName">

<hsf:consumer version="1.0.0" group="grp_sgcc_xpcz_app" clientTimeout="1000000"
id="helloServiceConsumer" interface="com.sgcc.echarge.proxy_hsfapi.station.iface.StationService"/>

</beans>
3. 已经完成了消费者的定义

6 Demo 下载地址
通过如下地址下载: http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package%2Fedas-app-demo%2Fedas-ap p-demo.zip
将下载下来的压缩包解开后,可以看到 itemcenter-api,itemcenter 和 detail 三个 Maven 工程。其中 itemcenter-api 工程提供接口定义,detail 工程是消费者应用,Itemcenter 工程是 服务提供者应用。

转载于:https://www.cnblogs.com/yaweizhang/p/11088552.html


http://chatgpt.dhexx.cn/article/5NancQL4.shtml

相关文章

分布式服务框架 HSF

摘要&#xff1a; RPC 协议采用多路复用的 TCP 长连接方式&#xff0c;在服务提供者和调用者间有多个服务请求同时调用时会共用同一个长连接&#xff0c;即一个连接交替传输不同请求的字节块。它既避免了反复建立连接开销&#xff0c;也避免了连接的等待闲置从而减少了系统连接…

HSF (RPC远程调用框架)

HSF 1. HSF概述1.1 概述1.2 HSF架构1.3 功能1.4 应用开发方式 2. 使用 Ali-Tomcat 开发2.1 Ali-Tomcat概述2.2 安装及开发环境配置2.2.1 安装Ali-Tomcat和Pandora2.2.2 配置IntelliJ IDEA开发环境 2.3 开发HSF应用2.3.1 定义服务接口2.3.2 开发服务提供者2.3.3 开发服务消费者2…

分布式服务框架HSF简介

高速服务框架 HSF (High-speed Service Framework)&#xff0c;是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。HSF 统一了分布式应用中服务的发布/调用方式&#xff0c;从而帮助您方便、快速的开发分布式应用 HSF 架构 HSF 作为一个纯客户端架构的 RPC 框架&#xff0c;本…

分布式服务框架HSF

HSF提供的是分布式服务开发框架&#xff0c;taobao内部使用较多&#xff0c;总体来说其提供的功能及一些实现基础&#xff1a; 1.标准Service方式的RPC 1&#xff09;、Service定义&#xff1a;基于OSGI的Service定义方式 2&#xff09;、TCP/IP通信&#xff1a; IO方式…

分布式 RPC 框架HSF

分布式 RPC 框架HSF 概述HSF架构调用方式优势应用场景 概述 HSF (High-speed Service Framework)&#xff0c;高速服务框架&#xff0c;是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。HSF 作为阿里巴巴的基础中间件&#xff0c;联通不同的业务系统&#xff0c;解耦系统间的…

关于 HSF框架 (一)简单介绍

HSF介绍 HSF全称 high speed frameworkd, 是Alibaba内部使用的RPC框架&#xff0c;最初与Dubbo进行内部竞争&#xff0c;由于多方面的原因最终选择了HSF。 主要原因如下&#xff1a; HSF代码量少一些&#xff0c;轻量一些&#xff0c;代码量大概2/3, Dubbo设计更加全面功能更多…

hsaf框架

一.技术分层 a&#xff09;.前端展现层&#xff0c;泛指一切在客户端直接与用户打交道的客户界面&#xff08;&#xff09;&#xff0c;MVC架构中的view层 b&#xff09;.控制层&#xff1a;分为过滤器拦截器层&#xff0c;Controller控制器层 c&#xff09;.业务逻辑层&…

高速服务框架HSF

一、简述 HSF(High-speed Service Framework)&#xff0c;是在阿里巴巴内部广泛使用的分布式 RPC 服务框架。 HSF 连通不同的业务系统&#xff0c;解耦系统间的实现依赖。HSF 从分布式应用的层面&#xff0c;统一了服务的发布与调用方式&#xff0c;从而帮助用户更加方便、快…

阿里HSF(服务框架)

文章目录 HSF&#xff08;服务框架&#xff09;简介架构设计Provider——服务提供者Consumer——服务消费者ConfigServer——配置服务器Diamond——持久化配置中心addressServer——地址服务元数据存储 HSF&#xff08;服务框架&#xff09; 文章地址 简介 高速服务框架 HS…

MySQL的批量更新和批量新增优化

MySQL的批量更新和批量插入优化 如果需要批量插入和批量更新操作就需要进行sql 的优化&#xff0c;否则近30万条数据的插入或更新就会耗费几分钟甚至更多的时间&#xff0c; 此文仅批量插入和批量更新的几种优化。 批量插入篇&#xff08;使用多条insert语句、使用union all创…

mybatis 批量更新

1 更新单条记录 UPDATE course SET name course1 WHEREid id1; 2 更新多条记录的同一个字段为同一个值 UPDATE course SET name course1 WHERE id in (id1,id2,id3); 3 更新多条记录为多个字段为不同的值 3.1 比较普通的写法&#xff0c;是通过循环&#xff0c;依次执行…

Update批量更新(高性能、动态化)

文章目录 前言一、环境开发环境测试环境 二、灵光乍现MyBatis-Plus源码2.初见真正的批量更新语法 三、开工基础类搭建SysUser&#xff08;表sys_user实体类&#xff09;Stash&#xff08;拼接SQL服务&#xff0c;内部类&#xff09;TableCacheDTO&#xff08;数据表信息存储&am…

mybatis-plus批量更新updateBatchById

前言 在使用mybatis-plus过程中&#xff0c;有很多插件都特别优秀&#xff0c;不仅使我们代码更加优雅&#xff0c;也提升了效率。其中有个批量插入的插件insertBatchSomeColumn使用起来也挺方便的&#xff0c;但是批量更新一直没有官方插件&#xff0c;网络上面也没有找到靠谱…

mysql批量更新方法

目录 方法一 replace into 批量更新 方法二 insert into 批量更新 方法三 临时表 批量更新 方法四 case when 批量更新 本篇文章实验mysql版本为5.7.20 隔离级别为rr&#xff0c;加锁场景的问题在mysql8.0.18中为复现 方法一 replace into 批量更新 原理&#xff1a;replace i…

mybatis批量更新数据三种方法

具体的可以参考下面链接&#xff1a; ​​​​​​mybatis批量更新数据三种方法效率对比_PreciousLife的博客-CSDN博客_mybatis 批量更新 此处说明下&#xff0c;若是使用for循环遍历方式&#xff0c;来生成N条sql&#xff0c;那么就需要注意两个地方&#xff1a; 第一个地方…

MySql中4种批量更新的方法

https://yq.aliyun.com/ziliao/59813 MySql中4种批量更新的方法 最近在完成MySql项目集成的情况下&#xff0c;需要增加批量更新的功能&#xff0c;根据网上的资料整理了一下&#xff0c;很好用&#xff0c;都测试过&#xff0c;可以直接使用。 mysql 批量更新共有以下四种办法…

MySQL批量更新的四种方法

最近做一个需求&#xff0c;更新3w条数据&#xff0c;一个一个update去更新的&#xff0c;结果花了80分钟&#xff0c;这样性能上很差&#xff0c;也容易阻塞&#xff0c;所以就找了一些MySQL批量更新的方式&#xff0c;在此记录一下 方法一&#xff1b;replace into 这种更新…

Mybatis之批量更新数据(批量update)

前言 当我们使用mybatis的时候&#xff0c;可能经常会碰到一批数据的批量更新问题&#xff0c;因为如果一条数据一更新&#xff0c;那每一条数据就需要涉及到一次数据库的操作&#xff0c;包括网络IO以及磁盘IO&#xff0c;可想而知&#xff0c;这个效率是非常低下的。而平时我…

List和Set之间的转换:达到集合元素去重复

在项目中看到一段代码&#xff1a; return new ArrayList<>(new HashSet<LabelEnum>(list)); 当时我的表情是这样的&#xff1a; 这把list作为构造参数创建新的集合来返回是要做什么&#xff0c;这里的list也是ArrayList集合&#xff0c;这样绕了一圈返回…

【JAVA】List转Set并按照List的顺序排序,HashSet、LinkedHashSet、TreeSet元素保存顺序List转换对比

话不多说 直接代码测试效果: // 简化代码 直接 数组转list 就不用 写很多add了 哈哈哈 String[] array {"f","a","r","q","b","e","o","z","v","p","g"};//…