閱讀677 返回首頁    go 阿裏雲 go 技術社區[雲棲]


消費者訂閱服務__服務開發_開發者指南_企業級分布式應用服務 EDAS-阿裏雲

消費者的訂閱從代碼編寫的角度分為兩個部分:首先 Spring 的配置文件使用標簽<hsf:consumer/>定義好一個 Bean;然後在使用的時候從 Spring 的 context 中將 Bean 取出來即可。Demo 工程的 detail 為消費者的示例,示例代碼說明如下。

消費者配置

與生產者一樣消費者的配置文件分為 Maven 依賴配置與 Spring 的配置,且 Maven 的依賴與生產者依賴一樣,詳情請參考文檔生產者實現服務服務配置小節。

除了必要的 Spring 所定義的配置之外,還需要在 Spring 的配置文件中增加消費者的定義,HSF 框架將根據該配置文件去服務中心訂閱所需的服務,配置文件 /resource/hsf-consumer-beans.xml 內容與釋義如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:hsf="https://www.taobao.com/hsf"
  4. xmlns="https://www.springframework.org/schema/beans"
  5. xsi:schemaLocation="https://www.springframework.org/schema/beans
  6. https://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  7. https://www.taobao.com/hsf
  8. https://www.taobao.com/hsf/hsf.xsd" default-autowire="byName">
  9. <!-- 消費一個服務示例 -->
  10. <hsf:consumer
  11. <!-- Bean ID,在代碼中可根據此ID進行注入並使用 -->
  12. id=“item"
  13. <!-- 服務名,與服務提供者的相應配置對應,HSF 將根據 interface + version + group 查詢並訂閱所需服務 -->
  14. interface="com.alibaba.edas.carshop.itemcenter.ItemService"
  15. <!-- 版本號,與服務提供者的相應配置對應,HSF 將根據 interface + version + group 查詢並訂閱所需服務 -->
  16. version="1.0.0"
  17. <!-- 分組名,與服務提供者的相應配置對應,HSF 將根據 interface + version + group 查詢並訂閱所需服務 -->
  18. group="testHSFGroup">
  19. </hsf:consumer>
  20. </beans>

消費者使用服務

Demo 中的示例代碼如下:

  1. public class StartListener implements ServletContextListener{
  2. @Override
  3. public void contextInitialized( ServletContextEvent sce ) {
  4. ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext( sce.getServletContext() );
  5. // 根據 Spring 配置中的Bean ID “item” 獲取訂閱到的服務
  6. final ItemService itemService = ( ItemService ) ctx.getBean( "item" );
  7. ……
  8. // 調用服務 ItemService 的 getItemById 方法
  9. System.out.println( itemService.getItemById( 1111 ) );
  10. // 調用服務 ItemService 的 getItemByName 方法
  11. System.out.println( itemService.getItemByName( "myname is le" ) );
  12. ……
  13. }
  14. }

消費者配置屬性清單

除了示例代碼中體現的屬性(interface,group,version)之外,還有下表的屬性配置以供選擇:

屬性 描述
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 配置該參數,目的是當服務進行訂閱時,會在該參數指定時間內,阻塞線程等待地址推送,避免調用該服務時因為地址為空而出現地址找不到的情況。若超過該參數指定時間,地址還是沒有推送,線程將不再等待,繼續初始化後續內容。

標簽配置示例:

  1. <hsf:consumer id="service" interface="com.taobao.edas.service.SimpleService"
  2. version="1.1.0" group="test1" clientTimeout="3000"
  3. target="10.1.6.57:12200?_TIMEOUT=1000" maxWaitTimeForCsAddress="5000">
  4. <hsf:methodSpecials>
  5. <hsf:methodSpecial name="sum" timeout="2000" ></hsf:methodSpecial>
  6. </hsf:methodSpecials>
  7. </hsf:consumer>

開發環境消費服務

完成代碼和配置的開發任務之後,在 Eclipse 和 IDEA 中,可直接以 Ali-Tomcat 運行該服務(具體請參照文檔 IDE 運行時啟動配置。運行成功後,請參考開發環境搭建文檔,在搭建好的 ConfigCenter 中查詢到所需要消費的服務。

最後更新:2016-11-29 17:54:38

  上一篇:go 生產者實現服務__服務開發_開發者指南_企業級分布式應用服務 EDAS-阿裏雲
  下一篇:go HSF 特性使用__服務開發_開發者指南_企業級分布式應用服務 EDAS-阿裏雲