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 配置:
屬性 | 描述 |
interface | interface 必須配置[String],為服務對外提供的接口 |
version | version 為可選配置[String],含義為服務的版本,默認為 1.0.0 |
group | serviceGroup 為可選配置[String],含義為服務所屬的組別,以便按 組別來管理服務的配置,默認為 HSF |
clientTimeout | 該配置對接口中的所有方法生效,但是如果客戶端通過 MethodSpecial 屬性對某方法配置了超時時間,則該方法的超時時間以客戶端配置為准,其他方法不受影響,還是以服務端配置為 准 |
serializeType | serializeType 為可選配置[String(hessian|java)],含義為序列化類 型,默認為 hessian |
corePoolSize | 單獨針對這個服務設置核心線程池,是從公用線程池這個大蛋糕 里切一塊下來 |
maxPoolSize | 單獨針對這個服務設置線程池,是從公用線程池這個大蛋糕里切 一塊下來 |
enableTXC | 開啟分布式事務 Txc |
ref | ref 必須配置[ref],為需要發布為 HSF 服務的 spring bean id |
methodSpecials | methodSpecials 為可選配置,用於為方法單獨配置超時(單位 ms), 這樣接口中的方法可以采用不同的超時時間,該配置優先級高於 上面的 clientTimeout 的超時配置,低於客戶端的 methodSpecials 配置 |
標簽配置示例:
Consumer 配置 :
屬性 | 描述 |
interface | interface 必須配置[String],為需要調用的服務的接口。 |
version | version 為可選配置[String],含義為需要調用的服務的版本,默認為 1.0.0 |
group | group 為可選配置[String],含義為需要調用的服務所在 的組,默認為 HSF,建議配置。 |
methodSpecials | methodSpecials 為可選配置,含義為為方法單獨配置超時 (單位 ms),這樣接口中的方法可以采用不同的超時時間, 該配置優先級高於服務端的超時配置。 |
target | 主要用於單元測試環境和 hsf.runmode=0 的開發環境中, 在運行環境下,此屬性將無效,而是采用配置中心推送回 來的目標服務地址信息。 |
connectionNum | connectionNum 為可選配置,含義為支持設置連接到 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 工程是 服務提供者應用。