HSF propose quatre classes pour publier et s'abonner à des services. Chaque classe est disponible sous forme d'API Java ou de configuration Spring XML.
| Classe | Rôle | Approche |
|---|---|---|
HSFApiProviderBean |
Publier un service | API Java |
HSFSpringProviderBean |
Publier un service | Spring XML |
HSFApiConsumerBean |
S'abonner à un service | API Java |
HSFSpringConsumerBean |
S'abonner à un service | Spring XML |
Chaque classe Spring (HSFSpringXxxBean) expose la même configuration que les méthodes setter de sa classe API correspondante (HSFApiXxxBean).
Prérequis
Avant de commencer, assurez-vous d'avoir :
Ajouté le SDK EDAS en tant que dépendance Maven (consultez la section Ajouter la dépendance)
Une interface de service et sa classe d'implémentation
Ajouter la dépendance
Ajoutez la dépendance suivante à votre fichier pom.xml :
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sdk</artifactId>
<version>{version}</version>
</dependency>
Remplacez {version} par la version de votre SDK EDAS.
Publier un service (ProviderBean)
Un bean fournisseur publie une implémentation d'interface de service dans le registre HSF afin que les consommateurs puissent la découvrir et l'appeler.
Initialisez chaque HSFApiProviderBean une seule fois par service. Mettez en cache l'objet après l'initialisation, car sa création consomme beaucoup de ressources.
Approche par API Java
Utilisez com.taobao.hsf.app.api.util.HSFApiProviderBean pour publier un service par programmation.
// 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();
Approche par Spring XML
Utilisez com.taobao.hsf.app.spring.util.HSFSpringProviderBean dans un fichier de configuration Spring pour publier un service de manière déclarative.
<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>
Propriétés de ProviderBean
| Propriété | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| serviceInterface | String | Oui | N/A | Interface qui fournit le service HSF. Les consommateurs utilisent cette interface pour s'abonner. |
| target | Object | Oui | N/A | Objet d'implémentation de l'interface spécifiée par serviceInterface. |
| serviceVersion | String | Non | 1.0.0 | Version du service. Les consommateurs utilisent cette valeur pour s'abonner à une version spécifique. |
| serviceGroup | String | Non | HSF | Groupe de service. Les consommateurs utilisent cette valeur pour s'abonner à un groupe spécifique. |
| serviceDesc | String | Non | N/A | Description du service à des fins de gestion. |
| clientTimeout | int | Non | 3000 | Délai d'attente de réponse en millisecondes. Lève une exception HSFTimeOutException si le fournisseur ne répond pas dans les temps. |
| methodSpecials | MethodSpecial[] | Non | N/A | Remplacements de délai d'attente par méthode. Définissez MethodSpecial.methodName sur le nom de la méthode et MethodSpecial.clientTimout sur la valeur du délai d'attente en millisecondes. Cette propriété prévaut sur clientTimeout. |
| preferSerializeType | String | Non | hessian2 | Protocole de sérialisation pour les données de requête et de réponse. Valeurs valides : java, hessian, hessian2, json, kryo. |
| corePoolSize | String (valeur entière) | Non | 0 | Nombre minimal de threads dans un pool de threads dédié pour ce service. Si non défini, le pool de threads partagé du fournisseur HSF est utilisé. |
| maxPoolSize | String (valeur entière) | Non | 0 | Nombre maximal de threads dans un pool de threads dédié pour ce service. Si non défini, le pool de threads partagé du fournisseur HSF est utilisé. |
S'abonner à un service (ConsumerBean)
Un bean consommateur s'abonne à un service HSF publié et fournit un objet proxy pour l'invocation distante.
Initialisez chaque HSFApiConsumerBean une seule fois par service. Mettez en cache à la fois l'objet bean et le proxy qu'il renvoie, car leur création consomme beaucoup de ressources.
HSFApiConsumerBean met en cache les configurations de service en interne. Si vous configurez plusieurs fois le même service, seule la première configuration prend effet.
Approche par API Java
Utilisez com.taobao.hsf.app.api.util.HSFApiConsumerBean pour vous abonner à un service par programmation.
// 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");
Approche par Spring XML
Utilisez com.taobao.hsf.app.spring.util.HSFSpringConsumerBean dans un fichier de configuration Spring pour vous abonner à un service de manière déclarative.
<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>
Propriétés de ConsumerBean
| Propriété | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
| interfaceName | String | Oui | N/A | Nom de l'interface à laquelle s'abonner. |
| version | String | Oui | N/A | Version du service cible. |
| group | String | Oui | N/A | Groupe du service cible. |
| clientTimeout | int | Non | N/A | Délai d'attente de requête en millisecondes. Lève une exception HSFTimeOutException si aucune réponse n'est reçue. Le délai d'attente du consommateur prévaut sur celui du fournisseur. Si non défini, le délai d'attente du fournisseur s'applique. |
| methodSpecials | MethodSpecial[] | Non | N/A | Remplacements de délai d'attente par méthode. Définissez MethodSpecial.methodName sur le nom de la méthode et MethodSpecial.clientTimout sur la valeur du délai d'attente en millisecondes. Cette propriété prévaut sur clientTimeout. |
| maxWaitTimeForCsAddress | int | Non | N/A | Temps d'attente synchrone en millisecondes pour que Config Server pousse une adresse de service. Empêche l'exception HSFAddressNotFoundException lorsque le service est appelé avant l'arrivée de l'adresse. Recommandé : 5000. |
| asyncallMethods | List | Non | N/A | Méthodes à appeler de manière asynchrone. Chaque entrée utilise le format name:<method>;type:<type>;listener:<class>. Types valides : future (récupération du résultat avec un objet Future) et callback (HSF invoque l'écouteur une fois l'appel terminé). Le champ listener s'applique uniquement au type callback et doit implémenter HSFResponseCallback. |
| proxyStyle | String | Non | jdk | Mode proxy. Définissez sur javassist pour bloquer le bean consommateur. |
Modèles d'appels asynchrones
HSF prend en charge deux modèles d'appels asynchrones pour les méthodes consommatrices, configurés via la propriété asyncallMethods :
| Modèle | Fonctionnement |
|---|---|
future |
Retour immédiat. Récupérez le résultat ultérieurement avec un objet Future. |
callback |
Retour immédiat. HSF invoque l'écouteur enregistré lorsque la réponse arrive. L'écouteur doit implémenter HSFResponseCallback. |