全部產品
Search
文件中心

Enterprise Distributed Application Service:API手冊

更新時間:Jun 30, 2024

在HSF應用的API中,最關鍵的是建立ProviderBean和ConsumerBean相關的API。

背景資訊

根據使用者使用的情境不同,主要分為4個關鍵的類。

  • com.taobao.hsf.app.api.util.HSFApiProviderBean: 通過API編程的方式建立Provider Bean。

  • com.taobao.hsf.app.api.util.HSFApiConsumerBean: 通過API編程的方式建立Consumer Bean。

  • com.taobao.hsf.app.spring.util.HSFSpringProviderBean: 通過Spring配置的方式建立Provider Bean。

  • com.taobao.hsf.app.spring.util.HSFSpringConsumerBean: 通過Spring配置的方式建立Consumer Bean。

其中,HSFSpringXxxBean的配置屬性與HSFApiXxxBean的setter方法相對應。接下來就分別以ProviderBean和ConsumerBean的視角介紹這4個類的API。

ProviderBean

  • API編程方式 - HSFApiProviderBean

    通過配置並初始化com.taobao.hsf.app.api.util.HSFApiProviderBean即可完成HSF服務的發布。

    對於一個服務,com.taobao.hsf.app.api.util.HSFApiProviderBean的配置及初始化過程只需配置一次。此外,考慮到HSFApiProviderBean對象比較複雜,建議緩衝。

    • 範例程式碼:

      // 執行個體化並配置Provider Bean
      HSFApiProviderBean hsfApiProviderBean = new HSFApiProviderBean();
      hsfApiProviderBean.setServiceInterface("com.taobao.hsf.test.HelloWorldService");
      hsfApiProviderBean.setTarget(target); // target為serviceInterface指定介面的實現對象。
      hsfApiProviderBean.setServiceVersion("1.0.0");
      hsfApiProviderBean.setServiceGroup("HSF");
      
      // 初始化Provider Bean,發布服務。
      hsfApiProviderBean.init();
    • 可配置屬性工作表:

      除上述範例程式碼中設定的屬性,HSFApiProviderBean還包含許多其他可配置的屬性,均可通過對應的setter方法進行設定。

      屬性名稱

      類型

      是否必選

      預設值

      含義

      serviceInterface

      String

      設定HSF服務對外提供的業務介面。用戶端通過此屬性進行訂閱。

      target

      Object

      設定serviceInterface指定介面的服務實現對象。

      serviceVersion

      String

      1.0.0

      設定服務的版本號碼。用戶端通過此屬性進行訂閱。

      serviceGroup

      String

      HSF

      設定服務的組別。用戶端通過此屬性進行訂閱。

      serviceDesc

      String

      設定服務的描述,從而方便管理。

      clientTimeout

      int

      3000

      設定響應逾時時間(單位:毫秒)。如果服務端在設定的時間內沒有返回,則拋出HSFTimeOutException。

      methodSpecials

      MethodSpecial[]

      設定服務中某些方法的響應逾時時間。通過設定MethodSpecial.methodName指定方法名,通過設定MethodSpecial.clientTimeout指定當前方法的逾時時間,優先順序高於當前服務端的clientTimeout。

      preferSerializeType

      String

      hessian2

      針對HSF2,設定服務的請求參數和響應結果的序列化方式。可選值有java、hessian、hessian2、json和kryo。

      corePoolSize

      值為整型的String

      0

      佈建服務單獨的線程池,並指定最小活躍線程數量。若不設定該屬性,則預設使用HSF服務端的公用線程池。

      maxPoolSize

      值為整型的String

      0

      佈建服務單獨的線程池,並指定最大活躍線程數量。若不設定該屬性,則預設使用HSF服務端的公用線程池。

  • Spring配置方式 - HSFSpringProviderBean

    通過在Spring設定檔中,配置一個class為 com.taobao.hsf.app.spring.util.HSFSpringProviderBean的bean,即可完成HSF服務的發布。

    範例程式碼

    <bean id="helloWorldService" class="com.taobao.hsf.test.HelloWorldService" />
    
    <bean class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init">
        <!-- [必選] 設定HSF服務對外提供的業務介面 -->
        <property name="serviceInterface" value="com.taobao.hsf.test.HelloWorldService" />
    
        <!-- [必選] 設定serviceInterface指定介面的服務實現對象,即需要發布為HSF服務的spring bean id -->
        <property name="target" ref="helloWorldService" />
    
        <!-- [可選] 設定服務的版本號碼,預設為1.0.0 -->
        <property name="serviceVersion" value="1.0.0" />
    
        <!-- [可選] 設定服務的組別,預設為HSF -->
        <property name="serviceGroup" value="HSF" />
    
        <!-- [可選] 設定服務的描述,從而方便管理,預設為null -->
        <property name="serviceDesc" value="HelloWorldService providered by HSF" />
    
        <!-- [可選] 設定響應逾時時間(單位:毫秒)。如果服務端在設定的時間內沒有返回,則拋出HSFTimeOutException -->
        <!-- 預設為3000 ms -->
        <property name="clientTimeout" value="3000"/>
    
        <!-- [可選] 設定服務中某些方法的響應逾時時間。優先順序高於上面的clientTimeout -->
        <!-- 通過設定MethodSpecial.methodName指定方法名,MethodSpecial.clientTimeout指定方法的逾時時間 -->
        <property name="methodSpecials">
            <list>
                <bean class="com.taobao.hsf.model.metadata.MethodSpecial">
                    <property name="methodName" value="sum" />
                    <property name="clientTimeout" value="2000" />
                </bean>
            </list>
        </property>
    
        <!-- [可選] 設定服務的請求參數和響應結果的序列化方式。可選值包含java、hessian、hessian2、json和kryo -->
        <!-- 預設為hessian2 -->
        <property name="preferSerializeType" value="hessian2"/>
    
        <!-- [可選] 佈建服務單獨的線程池,並指定最小活躍線程數量。若不設定該屬性,則預設使用HSF服務端的公用線程池 -->
        <property name="corePoolSize" value="10"/>
    
        <!-- [可選] 佈建服務單獨的線程池,並指定最大活躍線程數量。若不設定該屬性,則預設使用HSF服務端的公用線程池 -->
        <property name="maxPoolSize" value="60"/>
    </bean>

ConsumerBean

  • API配置方式 - HSFApiConsumerBean

    通過配置並初始化com.taobao.hsf.app.api.util.HSFApiConsumerBean完成HSF服務的訂閱。

    對於同一個服務,com.taobao.hsf.app.api.util.HSFApiConsumerBean的配置及初始化過程只需配置一次。

    由於HSFApiConsumerBean對象內容多,建議將該對象以及擷取到的HSF代理進行緩衝。

    說明

    在HSF內部HSFApiConsumerBean對服務的配置是緩衝起來的。即如果對某個訂閱的服務進行了多次配置,只有第一次的配置生效。

    • 範例程式碼

      // 執行個體化並配置Consumer Bean
      HSFApiConsumerBean hsfApiConsumerBean = new HSFApiConsumerBean();
      hsfApiConsumerBean.setInterfaceName("com.taobao.hsf.test.HelloWorldService");
      hsfApiConsumerBean.setVersion("1.0.0");
      hsfApiConsumerBean.setGroup("HSF");
      
      // 初始化Consumer Bean,訂閱服務
      // true表示等待地址推送(逾時時間為3000毫秒),預設為false(非同步)
      hsfApiConsumerBean.init(true);
      
      // 擷取HSF代理HelloWorldService 
      helloWorldService = (HelloWorldService) hsfApiConsumerBean.getObject();
      
      // 發起HSF調用String 
      helloStr = helloWorldService.sayHello("Li Lei");
    • 可配置屬性工作表

      除上述範例程式碼中設定的屬性,HSFApiConsumerBean還包含許多其他可配置的屬性,均可通過對應的setter方法進行設定。

      屬性名稱

      類型

      是否必選

      預設值

      含義

      interfaceName

      String

      設定需要訂閱服務的介面名。用戶端通過此屬性進行訂閱。

      version

      String

      設定需要訂閱服務的版本號碼。用戶端通過此屬性進行訂閱。

      group

      String

      設定需要訂閱服務的組別。用戶端通過此屬性進行訂閱。

      clientTimeout

      int

      佈建要求逾時時間(單位:毫秒)。如果用戶端在設定的時間內沒有收到服務端響應,則拋出HSFTimeOutException。 若用戶端設定了clientTimeout,則優先順序高於服務端設定的clientTimeout。否則,在服務的遠程調用過程中,使用服務端設定的clientTimeout。

      methodSpecials

      MethodSpecial[]

      設定服務中某些方法的請求逾時時間。通過設定MethodSpecial.methodName指定方法名,通過設定MethodSpecial.clientTimeout指定當前方法的逾時時間,優先順序高於當前用戶端的clientTimeout。

      maxWaitTimeForCsAddress

      int

      設定同步等待ConfigServer推送地址的時間(單位:毫秒),從而避免因地址還未推送到就發起服務調用造成的HSFAddressNotFoundException。一般建議設定為5000毫秒,即可滿足推送等待時間。

      asyncallMethods

      List

      設定需要非同步呼叫的方法列表。List中的每一個字串的格式為:

      • name:方法名

      • type:非同步呼叫類型

      • listener:監聽器

      其中listener只對callback類型的非同步呼叫生效。type的類型有:

      • future:通過Future的方式去擷取請求執行的結果。

      • callback:當遠程服務的調用完成後,HSF會使用響應結果回調此處配置的listener,該listener需要實現HSFResponseCallback介面。

      proxyStyle

      String

      jdk

      設定服務的代理模式,一般不用配置。如果要攔截這個consumer bean,需要配置成javassist。

  • Spring配置方式 - HSFSpringConsumerBean

    通過在Spring設定檔中,配置一個class為com.taobao.hsf.app.api.util.HSFSpringConsumerBean的bean,即可實現服務的訂閱。

    範例程式碼

    <bean id="helloWorldService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean">
        <!-- [必選] 設定需要訂閱服務的介面名 -->
        <property name="interfaceName" value="com.taobao.hsf.test.HelloWorldService" />
    
        <!-- [必選] 設定需要訂閱服務的版本號碼 -->
        <property name="version" value="1.0.0" />
    
        <!-- [必選] 設定需要訂閱服務的組別 -->
        <property name="group" value="HSF" />
    
        <!-- [可選] 佈建要求逾時時間(單位:毫秒)。如果用戶端在設定的時間內沒有收到服務端響應,則拋出HSFTimeOutException -->
        <!-- 若用戶端設定了clientTimeout,則優先順序高於服務端設定的clientTimeout。否則,在服務的遠程調用過程中,使用服務端設定的clientTimeout。-->
        <property name="clientTimeout" value="3000" />
    
        <!-- [可選] 設定服務中某些方法的請求逾時時間,優先順序高於當前用戶端的clientTimeout -->
        <!-- 通過設定MethodSpecial.methodName指定方法名,通過設定MethodSpecial.clientTimeout指定當前方法的逾時時間 -->
        <property name="methodSpecials">
            <list>
                <bean class="com.taobao.hsf.model.metadata.MethodSpecial">
                    <property name="methodName" value="sum" />
                    <property name="clientTimeout" value="2000" />
                </bean>
            </list>
        </property>
    
        <!-- [可選] 設定同步等待ConfigServer推送地址的時間(單位:毫秒)-->
        <!-- 從而避免因地址還未推送到就發起服務調用造成的HSFAddressNotFoundException -->
        <!-- 一般建議設定為5000毫秒,即可滿足推送等待時間 -->
        <property name="maxWaitTimeForCsAddress"  value="5000"/>
    
        <!-- [可選] 設定需要非同步呼叫的方法列表。List中的每一個字串的格式為:-->
        <!-- name:方法名 -->
        <!-- type:非同步呼叫類型 -->
        <!-- listener:監聽器 -->
        <!-- 其中,listener只對callback類型的非同步呼叫生效-->
        <!-- type的類型有: -->
        <!-- future: 通過Future的方式去擷取請求執行的結果 -->
        <!-- callback: 當遠程服務的調用完成後,HSF會使用響應結果回調此處配置的listener,該listener需要實現HSFResponseCallback介面 -->
        <property name="asyncallMethods">
            <list>
                <value>name:sayHello;type:callback;listener:com.taobao.hsf.test.service.HelloWorldServiceCallbackHandler</value>
            </list>
        </property>
    
        <!-- [可選] 設定服務的代理模式,一般不用配置。如果要攔截這個consumer bean,需要配置成javassist -->
        <property name="proxyStyle" value="jdk" />
    </bean>