HSF 簡介 HSF(High Speed Service Framework),高速服務框架,是阿里-主要採用的服務框架,其目的是 做爲橋樑聯通不一樣的業務系統,解耦系統之間的實現依賴。java
1: RPC 遠程過程調用(Remote Procedure Call)是一種經過網絡從遠程計算機程序上請求服務的協 議,它的特色在於不須要了解底層網絡技術。在 OSI 網絡通訊模型中,RPC 跨越了傳輸層和 應用層。RPC 使得開發分佈式應用更加容易web
2: ConfigServer(地址註冊中心) HSF 是一個 RPC 框架,服務端須要將地址發送到註冊中心讓客戶端可以進行服務發現,客 戶端須要經過註冊中心訂閱一個服務的地址。服務與地址的對應關係是多對多的關係,一個 服務能夠由多個地址提供,一 個地址能夠提供多種服務。當一個服務有了新地址(機器)或 者減小了地址(機器)時,註冊中心會通知這個服務的訂閱方將地址增長或者減小,這個注 冊中心就是 Configserver,它負責存儲地址信息以及地址變動的推送。spring
3: Diamond(配置中心) HSF 持久化的配置中心是 Diamond。HSF 提供軟負載服務,其中的路由規則是在 Diamond 上 進行配置,而後推送到客戶端進行解析,第二章節中開發環境搭建已經包含 Diamond。api
4: Pandora Pandora 是 HSF 生存的容器,由 pandora 來管理整個 HSF 的生命週期和二方包的隔離網絡
HSF 標籤清單app
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 配置 |
標籤配置示例: eclipse
Consumer 配置 :
webapp
屬性 | 描述 |
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 項目
經過上面第1、二章節咱們已經在開發工具中配置好對應的插件,而且搭建了本地服務註冊 配置中心,下面咱們以一個 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 工程是 服務提供者應用。