开发者学堂课程【企业级分布式应用服务 EDAS 使用攻略:HSF 基础知识】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/359/detail/4219
HSF 基础知识
内容介绍:
一、配置文件示例
二、HSF 标签清单
三、HSF jvm 参数(全局参数)配置
前面已经介绍了开发工具的配置及开发环境的搭建,接下来我们将学习 HSF 的项目开发。
在进行 HSF 项目开发前,首先应 JAVA 意义开发的技能,包括 Spring 框架、Maven项目管理工具、通用日志框架的使用以及 HSF。
一、配置文件示例
1.服务发布者配置文件实例:
<bean id="impl"class"
com.taobao.edas.service.implSimpl
eServiceImpl"/>
//声明了一个服务器接口类型的 bean,与Spring 通用的 bean 完全相同
<hsf.provider id="simpleService"
interface="com.taobao.edas.service.SimpleService"ref "imp
l"version="1.0.1"
group="test1"clientTimeout="3000">
//通过 hsf.provider 说明服务发布者的基本信息,首先定义了服务发布者的接口(com.taobao.edas.service.SimpleService),接口的实现包括 version、group 等属性,通过属性 clientTimeout 定义服务器超时时间。
</hsf.provider>
注:interface 属性和 ref 属性是必须填写的,version、group 和 clientTimeout 如果不填写会有一个默认值。在项目开发中,version 和 group 最 好要设定一个值。
2.Consumer 配置文件示例
<hsf.provider id="service"interface="com.taobao.edas.service.SimpleService"version="1.0.1"group="test1"clientTimeout="3000">
//相对于 provider 配置文件示例,少了接口的实现。主要声明了 Consumer 主要消费哪个接口,还显示 version、group 等属性,通过属性 clientTimeout 定义服务器超时时间。
</hsf.provider>
注:interface 属性是必须填写的,version、group 和 clientTimeout 如果不填写会有一个默认值。
在项目开发中,version 和 group 最好要设定一个值,且 interface、version 和group 的值必须与 provider 配置文件示例中的值一致(区分大小写),否则使用Consumer 校用 provider 配置文件时,可能会找不到地址。
二、HSF 标签清单
1.Consumer 配置标签清单
(1)interface:必须配置 [string],为需要调用的服务的接口
(2)version:为需要调用的服务的版本,默认为 1.0.0
(3)group:为需要调用的服务所在的组,默认为 HSF
(4)methodSpecials:可选配置,为方法配置超时时间,即通过 clientTimeout 声明的接口的超时时间,可以通过 methodSpecials 声明超时时间
(5)target:主要用于单元测试,即制定一台 provider 启动的 IP 地址。但生产环境下,不建议设置此属性,因为若在生产环境在 provider 出错,会导致服务出现异常,无法调用。
(6)connectionNum:可选配置,主要用于连接到 Server 的连接数,不需要开发者特殊关心,如果需要特殊设置,可联系现场的架构师,以选择合适的值
(7)clientTimeout:客户端设置接口中所有方法的超时时间,单位是毫秒。Provider、consumer 中超时时间设置的优先级:客户端 MethouSpecials> 客户端接口级别>服务端 MethouSpecials> 服务端接口级别
(8)asyncallMethods:异步调用的方法名列表及异步调用方式,不建议开发者使用,特殊需要可联系专业的架构师选择合适的值
(9)maxWaitTimeForCsAddress:一般不需要设置
标签配置示例:
<hsf.provider id="service"interface="com.taobao.edas.ser
vice.SimpleService"version="1.0.1"group="test1"clientTimeout="3000">
target="10.1.6.57:12200?_TIMEOUT=1000"maxWaitTimeF
orCsAddress="5000"
<hsf.methodSpecials>
<hsf.methodSpecials names="sum"timeout="2000">
</hsf.methodSpecials>
</hsf.consumer>
相较于之前的 Consumer 配置文件示例,多了 target 和 methodSpecials 调用事例,声明了一个单独的方法 sum,并给这个方法设置了一个超时时间2000毫秒,如果调用该方法的时间超过2000毫秒,就会忽略调用 sum 方法,直接返回上面设定的接口级别的3000毫秒的设置。
2.Provider 标签配置清单
interface、version、group、methodspecials与Consumer一致。
(1)serializeType:可选配置,序列化的属性,默认为 hessian,一般无需调整
(2)corePoolSize:设置服务核心线程池及对应属性,一般也无需调整
(3)enableTXC:若客户需要开启分布式事务,则需要开启这个属性
(4)ref:必须配置,为发布的 HSF 服务的 spring bean id
(5)methodSpecials:声明方法的超时时间
标签配置示例:
<bean id="impl"class"
com.taobao.edas.service.implSimpl
eServiceImpl"/>
<hsf.provider id="simpleService"interface="
com.taobao.e
das.service.SimpleService"ref "impl"version="1.0.1"
group="test1"clientTimeout="3000">enableTXC="
ture"
serializeType="hession">
<hsf.methodSpecials>
<hsf.methodSpecials name="sum"timeout="2000"/>
<hsf.methodSpecials>
</hsf.provider>
相较于先前的 Provider 配置文件示例,多了 enableTXC 和 methodSpecials 属性。
以上介绍了 Consumer 和 Provider 配置文件示例,仅部分标签需要开发者关注,其余标签根据实际应用场景参照架构师的建议使用。
三、HSF jvm 参数(全局参数)配置
1.-Dhsf.server.port
指定 HSF 的启动服务绑定端口,默认值为12200
2.-Dhsf.serializer
指定 HSF 的序列化方式,默认值为 hessian
3.-DdefaultHsfClientTimeout
指定 HSF 的客户端超时时间 ms,默认为3000
4.-Dhsf.server.max.poolsize
指定 HSF 服务端最大线程池大小,默认值为600,一般情况下用户不需要调整,但如果要进行压力测试,可能需要将该值调大。
实际生产过程中,如果-Dhsf.server.max.poolsize 超过600,一般是 HSF 启动端的业务逻辑出现了问题,即从 Consumer 调用的请求服务端不能及时处理导致超过默认值,说明需要开发者优化代码,找到解决方法,而非去加大该参数的值。
5.-Dhsf.server.min.poolsize
指定 HSF 服务端最小线程池大小,默认值为50