HSF proporciona cuatro clases para publicar y suscribirse a servicios. Cada clase está disponible como una API de Java o como una configuración XML de Spring.
|
Clase |
Función |
Enfoque |
|
|
Publicar un servicio |
API de Java |
|
|
Publicar un servicio |
XML de Spring |
|
|
Suscribirse a un servicio |
API de Java |
|
|
Suscribirse a un servicio |
XML de Spring |
Cada clase de Spring (HSFSpringXxxBean) expone la misma configuración que los métodos setter de su clase API correspondiente (HSFApiXxxBean).
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
El SDK de EDAS agregado como dependencia de Maven (consulte Agregar la dependencia)
Una interfaz de servicio y su clase de implementación
Agregar la dependencia
Agregue la siguiente dependencia a su archivo pom.xml:
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sdk</artifactId>
<version>{version}</version>
</dependency>
Reemplace {version} con la versión de su SDK de EDAS.
Publicar un servicio (ProviderBean)
Un bean de proveedor publica la implementación de una interfaz de servicio en el registro de HSF para que los consumidores puedan descubrirla e invocarla.
Inicialice cada HSFApiProviderBean solo una vez por servicio. Almacene el objeto en caché después de la inicialización, ya que su creación consume muchos recursos.
Enfoque de API de Java
Utilice com.taobao.hsf.app.api.util.HSFApiProviderBean para publicar un servicio mediante programació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();
Enfoque de XML de Spring
Utilice com.taobao.hsf.app.spring.util.HSFSpringProviderBean en un archivo de configuración de Spring para publicar un servicio de forma declarativa.
<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>
Propiedades de ProviderBean
|
Propiedad |
Tipo |
Obligatorio |
Predeterminado |
Descripción |
|
serviceInterface |
String |
Sí |
N/A |
La interfaz que proporciona el servicio HSF. Los consumidores utilizan esta interfaz para suscribirse. |
|
target |
Object |
Sí |
N/A |
El objeto de implementación de la interfaz especificada por serviceInterface. |
|
serviceVersion |
String |
No |
1.0.0 |
Versión del servicio. Los consumidores usan este valor para suscribirse a una versión específica. |
|
serviceGroup |
String |
No |
HSF |
Grupo del servicio. Los consumidores usan este valor para suscribirse a un grupo específico. |
|
serviceDesc |
String |
No |
N/A |
Descripción del servicio con fines de gestión. |
|
clientTimeout |
int |
No |
3000 |
Tiempo de espera de respuesta en milisegundos. Lanza |
|
methodSpecials |
MethodSpecial[] |
No |
N/A |
Anulaciones de tiempo de espera por método. Establezca |
|
preferSerializeType |
String |
No |
hessian2 |
Protocolo de serialización para los datos de solicitud y respuesta. Valores válidos: |
|
corePoolSize |
String (valor entero) |
No |
0 |
Número mínimo de hilos en un pool de hilos dedicado para este servicio. Si no se configura, se utiliza el pool de hilos compartido del proveedor HSF. |
|
maxPoolSize |
String (valor entero) |
No |
0 |
Número máximo de hilos en un pool de hilos dedicado para este servicio. Si no se configura, se utiliza el pool de hilos compartido del proveedor HSF. |
Suscribirse a un servicio (ConsumerBean)
Un bean de consumidor se suscribe a un servicio HSF publicado y proporciona un objeto proxy para la invocación remota.
Inicialice cada HSFApiConsumerBean solo una vez por servicio. Almacene en caché tanto el objeto bean como el proxy que devuelve, ya que su creación consume muchos recursos.
HSFApiConsumerBean almacena internamente las configuraciones de servicio en caché. Si configura el mismo servicio varias veces, solo surtirá efecto la primera configuración.
Enfoque de API de Java
Utilice com.taobao.hsf.app.api.util.HSFApiConsumerBean para suscribirse a un servicio mediante programació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");
Enfoque de XML de Spring
Utilice com.taobao.hsf.app.spring.util.HSFSpringConsumerBean en un archivo de configuración de Spring para suscribirse a un servicio de forma declarativa.
<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>
Propiedades de ConsumerBean
|
Propiedad |
Tipo |
Obligatorio |
Predeterminado |
Descripción |
|
interfaceName |
String |
Sí |
N/A |
El nombre de la interfaz a la que desea suscribirse. |
|
version |
String |
Sí |
N/A |
La versión del servicio destino. |
|
group |
String |
Sí |
N/A |
El grupo del servicio destino. |
|
clientTimeout |
int |
No |
N/A |
Tiempo de espera de la solicitud en milisegundos. Lanza |
|
methodSpecials |
MethodSpecial[] |
No |
N/A |
Anulaciones de tiempo de espera por método. Establezca |
|
maxWaitTimeForCsAddress |
int |
No |
N/A |
Milisegundos de espera síncrona para que Config Server envíe una dirección de servicio. Evita |
|
asyncallMethods |
List |
No |
N/A |
Métodos para llamar de forma asíncrona. Cada entrada utiliza el formato |
|
proxyStyle |
String |
No |
jdk |
Modo de proxy. Establézcalo en |
Patrones de llamada asíncrona
HSF admite dos patrones de llamada asíncrona para los métodos del consumidor, los cuales se configuran mediante la propiedad asyncallMethods:
|
Patrón |
Funcionamiento |
|
|
Devuelve el control inmediatamente. Recupere el resultado más adelante con un objeto |
|
|
Devuelve el control inmediatamente. HSF invoca al listener registrado cuando llega la respuesta. El listener debe implementar |