HSF, hizmetleri yayınlamak ve bu hizmetlere abone olmak için dört sınıf sunar. Her sınıf Java API veya Spring XML yapılandırması olarak kullanılabilir.
| Sınıf | Rol | Yaklaşım |
|---|---|---|
HSFApiProviderBean |
Hizmet yayınlama | Java API |
HSFSpringProviderBean |
Hizmet yayınlama | Spring XML |
HSFApiConsumerBean |
Hizmet aboneliği | Java API |
HSFSpringConsumerBean |
Hizmet aboneliği | Spring XML |
Her Spring sınıfı (HSFSpringXxxBean), karşılık gelen API sınıfındaki (HSFApiXxxBean) ayarlayıcı yöntemlerle aynı yapılandırmayı sunar.
Ön koşullar
Başlamadan önce aşağıdakileri yaptığınızdan emin olun:
EDAS SDK'sının Maven bağımlılığı olarak eklenmesi (bkz. Bağımlılığı ekleme)
Bir hizmet arayüzü ve bunun uygulama sınıfı
Bağımlılığı ekleme
Aşağıdaki bağımlılığı pom.xml dosyanıza ekleyin:
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sdk</artifactId>
<version>{version}</version>
</dependency>
{version} ifadesini EDAS SDK sürümünüzle değiştirin.
Hizmet yayınlama (ProviderBean)
Sağlayıcı bean'i, tüketicilerin keşfedip çağırabilmesi için bir hizmet arayüzü uygulamasını HSF kayıt defterine yayınlar.
Her HSFApiProviderBean öğesini hizmet başına yalnızca bir kez başlatın. Oluşturma işlemi kaynak yoğun olduğundan nesneyi başlatıldıktan sonra önbelleğe alın.
Java API yaklaşımı
Bir hizmeti programlı olarak yayınlamak için com.taobao.hsf.app.api.util.HSFApiProviderBean kullanın.
// Instantiate and configure a provider bean.
HSFApiProviderBean hsfApiProviderBean = new HSFApiProviderBean();
hsfApiProviderBean.setServiceInterface("com.taobao.hsf.test.HelloWorldService");
hsfApiProviderBean.setTarget(target); // target is the implementation object of the interface specified by serviceInterface.
hsfApiProviderBean.setServiceVersion("1.0.0");
hsfApiProviderBean.setServiceGroup("HSF");
// Initialize the provider bean to publish the service.
hsfApiProviderBean.init();
Spring XML yaklaşımı
Bir hizmeti bildirim temelli olarak yayınlamak için bir Spring yapılandırma dosyasında com.taobao.hsf.app.spring.util.HSFSpringProviderBean kullanın.
<bean id="helloWorldService" class="com.taobao.hsf.test.HelloWorldService" />
<bean class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init">
<!-- [Required] Service interface -->
<property name="serviceInterface" value="com.taobao.hsf.test.HelloWorldService" />
<!-- [Required] Implementation object (Spring bean ID) -->
<property name="target" ref="helloWorldService" />
<!-- [Optional] Service version. Default: 1.0.0 -->
<property name="serviceVersion" value="1.0.0" />
<!-- [Optional] Service group. Default: HSF -->
<property name="serviceGroup" value="HSF" />
<!-- [Optional] Service description -->
<property name="serviceDesc" value="HelloWorldService providered by HSF" />
<!-- [Optional] Response timeout in milliseconds. Default: 3000 -->
<property name="clientTimeout" value="3000"/>
<!-- [Optional] Per-method timeout. Takes precedence over 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>
<!-- [Optional] Serialization method. Valid values: java, hessian, hessian2, json, kryo. Default: hessian2 -->
<property name="preferSerializeType" value="hessian2"/>
<!-- [Optional] Minimum threads in a dedicated thread pool. Default: shared HSF thread pool -->
<property name="corePoolSize" value="10"/>
<!-- [Optional] Maximum threads in a dedicated thread pool. Default: shared HSF thread pool -->
<property name="maxPoolSize" value="60"/>
</bean>
ProviderBean özellikleri
| Özellik | Tür | Zorunlu | Varsayılan | Açıklama |
|---|---|---|---|---|
| serviceInterface | String | Evet | Yok | HSF hizmetini sağlayan arayüz. Tüketiciler abonelik için bu arayüzü kullanır. |
| target | Object | Evet | Yok | serviceInterface tarafından belirtilen arayüzün uygulama nesnesi. |
| serviceVersion | String | Hayır | 1.0.0 | Hizmet sürümü. Tüketiciler belirli bir sürüme abone olmak için bu değeri kullanır. |
| serviceGroup | String | Hayır | HSF | Hizmet grubu. Tüketiciler belirli bir gruba abone olmak için bu değeri kullanır. |
| serviceDesc | String | Hayır | Yok | Yönetim amaçları için hizmet açıklaması. |
| clientTimeout | int | Hayır | 3000 | Milisaniye cinsinden yanıt zaman aşımı. Sağlayıcı zamanında yanıt vermezse HSFTimeOutException fırlatılır. |
| methodSpecials | MethodSpecial[] | Hayır | Yok | Yöntem bazlı zaman aşımı geçersiz kılmaları. MethodSpecial.methodName değerini yöntem adına ve MethodSpecial.clientTimout değerini milisaniye cinsinden zaman aşımı değerine ayarlayın. clientTimeout önceliğine sahiptir. |
| preferSerializeType | String | Hayır | hessian2 | İstek ve yanıt verileri için seri hale getirme protokolü. Geçerli değerler: java, hessian, hessian2, json, kryo. |
| corePoolSize | String (tamsayı değeri) | Hayır | 0 | Bu hizmet için ayrılmış iş parçacığı havuzundaki minimum iş parçacığı sayısı. Ayarlanmadığında paylaşılan HSF sağlayıcı iş parçacığı havuzu kullanılır. |
| maxPoolSize | String (tamsayı değeri) | Hayır | 0 | Bu hizmet için ayrılmış iş parçacığı havuzundaki maksimum iş parçacığı sayısı. Ayarlanmadığında paylaşılan HSF sağlayıcı iş parçacığı havuzu kullanılır. |
Hizmet aboneliği (ConsumerBean)
Tüketici bean'i, yayınlanan bir HSF hizmetine abone olur ve uzak çağrı için bir proxy nesnesi sağlar.
Her HSFApiConsumerBean öğesini hizmet başına yalnızca bir kez başlatın. Hem bean nesnesini hem de döndürdüğü proxy'yi önbelleğe alın; bunların oluşturulması kaynak yoğundur.
HSFApiConsumerBean hizmet yapılandırmalarını dahili olarak önbelleğe alır. Aynı hizmeti birden çok kez yapılandırırsanız yalnızca ilk yapılandırma geçerli olur.
Java API yaklaşımı
Bir hizmete programlı olarak abone olmak için com.taobao.hsf.app.api.util.HSFApiConsumerBean kullanın.
// Instantiate and configure a consumer bean.
HSFApiConsumerBean hsfApiConsumerBean = new HSFApiConsumerBean();
hsfApiConsumerBean.setInterfaceName("com.taobao.hsf.test.HelloWorldService");
hsfApiConsumerBean.setVersion("1.0.0");
hsfApiConsumerBean.setGroup("HSF");
// Initialize the consumer bean.
// true = wait synchronously for address push (timeout: 3000 ms).
// false (default) = initialize asynchronously.
hsfApiConsumerBean.init(true);
// Get the HSF proxy object.
HelloWorldService helloWorldService = (HelloWorldService) hsfApiConsumerBean.getObject();
// Call the remote service.
String helloStr = helloWorldService.sayHello("Li Lei");
Spring XML yaklaşımı
Bir hizmete bildirim temelli olarak abone olmak için bir Spring yapılandırma dosyasında com.taobao.hsf.app.spring.util.HSFSpringConsumerBean kullanın.
<bean id="helloWorldService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean">
<!-- [Required] Service interface name -->
<property name="interfaceName" value="com.taobao.hsf.test.HelloWorldService" />
<!-- [Required] Service version -->
<property name="version" value="1.0.0" />
<!-- [Required] Service group -->
<property name="group" value="HSF" />
<!-- [Optional] Request timeout in milliseconds. Consumer timeout takes precedence over provider timeout. -->
<property name="clientTimeout" value="3000" />
<!-- [Optional] Per-method timeout. Takes precedence over 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>
<!-- [Optional] Synchronous wait time (ms) for Config Server to push a service address.
Prevents HSFAddressNotFoundException when the service is called before the address arrives.
Recommended: 5000 -->
<property name="maxWaitTimeForCsAddress" value="5000"/>
<!-- [Optional] Async call methods. Format: name:<method>;type:<future|callback>;listener:<class>
The listener field only applies to the callback type and must implement HSFResponseCallback. -->
<property name="asyncallMethods">
<list>
<value>name:sayHello;type:callback;listener:com.taobao.hsf.test.service.HelloWorldServiceCallbackHandler</value>
</list>
</property>
<!-- [Optional] Proxy mode. Default: jdk. Set to javassist to block the consumer bean. -->
<property name="proxyStyle" value="jdk" />
</bean>
ConsumerBean özellikleri
| Özellik | Tür | Zorunlu | Varsayılan | Açıklama |
|---|---|---|---|---|
| interfaceName | String | Evet | Yok | Abone olunacak arayüz adı. |
| version | String | Evet | Yok | Hedef hizmetin sürümü. |
| group | String | Evet | Yok | Hedef hizmetin grubu. |
| clientTimeout | int | Hayır | Yok | Milisaniye cinsinden istek zaman aşımı. Yanıt alınamazsa HSFTimeOutException fırlatılır. Tüketici zaman aşımı, sağlayıcı zaman aşımından önceliklidir. Ayarlanmadığında sağlayıcı zaman aşımı uygulanır. |
| methodSpecials | MethodSpecial[] | Hayır | Yok | Yöntem bazlı zaman aşımı geçersiz kılmaları. MethodSpecial.methodName değerini yöntem adına ve MethodSpecial.clientTimout değerini milisaniye cinsinden zaman aşımı değerine ayarlayın. clientTimeout önceliğine sahiptir. |
| maxWaitTimeForCsAddress | int | Hayır | Yok | Config Server'ın bir hizmet adresi göndermesini senkronize olarak beklemek için milisaniye cinsinden süre. Adres gelmeden önce hizmet çağrılırsa HSFAddressNotFoundException oluşmasını engeller. Önerilen değer: 5000. |
| asyncallMethods | List | Hayır | Yok | Eşzamansız olarak çağrılacak yöntemler. Her giriş name:<method>;type:<type>;listener:<class> biçimini kullanır. Geçerli türler: future (sonucu bir Future nesnesiyle alma) ve callback (çağrı tamamlandığında HSF dinleyiciyi çağırır). listener alanı yalnızca callback türü için geçerlidir ve HSFResponseCallback uygulamalıdır. |
| proxyStyle | String | Hayır | jdk | Proxy modu. Tüketici bean'ini engellemek için javassist olarak ayarlayın. |
Eşzamansız çağrı kalıpları
HSF, tüketici yöntemleri için asyncallMethods özelliği üzerinden yapılandırılan iki eşzamansız çağrı kalıbını destekler:
| Kalıp | Çalışma şekli |
|---|---|
future |
Anında döner. Sonucu daha sonra bir Future nesnesiyle alın. |
callback |
Anında döner. Yanıt geldiğinde HSF kayıtlı dinleyiciyi çağırır. Dinleyici HSFResponseCallback uygulamalıdır. |