Dans ce tutoriel, vous créez un registre de services sur Microservices Engine (MSE) pour une application Apache Dubbo et l'utilisez pour l'enregistrement et la découverte de services. À la fin de ce guide, un consommateur Dubbo exécuté sur votre machine locale appelle un fournisseur découvert via un registre MSE Nacos.
Architecture
L'exemple d'application est une application de microservices Dubbo composée d'un fournisseur et d'un consommateur. Vous développez ces deux rôles sous forme de deux projets Maven distincts sur votre machine locale. Tous deux se connectent à la même instance de registre sur MSE via son endpoint public.
Projet fournisseur — Expose l'interface
com.alibaba.mse.IHelloServiceen tant que service Dubbo sur le port 28082 et enregistre le service auprès de l'instance de registre sur MSE.Projet consommateur — S'abonne à
com.alibaba.mse.IHelloServicevia la même instance de registre et appelle le fournisseur.Instance de registre sur MSE — Fait office de registre de services auprès duquel le fournisseur s'enregistre et auquel le consommateur s'abonne.
Types de registres
MSE peut héberger un registre de services Nacos, ZooKeeper ou Eureka pour une application Dubbo. Ce tutoriel utilise MSE Nacos ; chaque exemple de configuration de cette rubrique cible une instance MSE Nacos.
Nacos (utilisé dans ce tutoriel) — Définissez l'adresse du registre Dubbo sur l'endpoint public de votre instance MSE Nacos. Aucune autre configuration spécifique au registre n'est requise.
ZooKeeper — Si vous utilisez MSE ZooKeeper comme registre de services, remplacez le code du registre à l'étape 2 par le code correspondant pour ZooKeeper. Pour plus d'informations, consultez Notes d'utilisation.
Prérequis
Téléchargez Maven et configurez les variables d'environnement.
Un IDE, tel qu'IntelliJ IDEA ou Eclipse, est installé sur votre machine locale.
Une instance MSE Nacos. Pour obtenir des instructions, consultez Créer une instance de moteur Nacos
Créer un namespace. Ce tutoriel utilise le namespace par défaut,
Public.
Étape 1 : Créer le projet fournisseur et définir le service
Dans cette étape, vous créez le projet Maven pour le fournisseur et définissez le service que celui-ci expose. Dans Dubbo, tous les services sont fournis sous forme d'interfaces.
Dans votre IDE, créez un projet Maven pour le fournisseur.
-
Ajoutez les dépendances
dubboetnacos-clientau fichierpom.xml.<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.9</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.4.2</version> </dependency> </dependencies> Dans le répertoire
src/main/java, créez un package nommécom.alibaba.mse.-
Dans
com.alibaba.mse, créez une interface nomméeIHelloServicequi contient une méthodesayHello.package com.alibaba.mse; public interface IHelloService { String sayHello(String str); } -
Dans
com.alibaba.mse, créez une classe nomméeIHelloServiceImplqui implémente l'interface.package com.alibaba.mse; public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
Étape 2 : Configurer le fournisseur pour utiliser MSE Nacos comme registre
Dans cette étape, vous créez le fichier provider.xml, qui expose IHelloService en tant que service Dubbo et pointe le fournisseur vers l'instance MSE Nacos. Récupérez d'abord l'endpoint de l'instance, car la configuration du registre en a besoin.
Connectez-vous à la console MSE et consultez l'endpoint public de l'instance Nacos que vous avez créée sur MSE. L'endpoint public s'affiche dans la colonne Access Method de la liste des instances et suit le format
mse.XX.nacos.mse.aliyuncs.com.Dans le répertoire
src/main/resourcesdu projet fournisseur, créez un fichier nomméprovider.xml.-
Ajoutez la configuration suivante au fichier
provider.xml. Remplacezmse.XX.nacos.mse.aliyuncs.compar l'endpoint public de votre instance Nacos.<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <dubbo:application name="demo-provider"/> <dubbo:protocol name="dubbo" port="28082"/> <dubbo:service interface="com.alibaba.mse.IHelloService" ref="helloService"/> <bean id="helloService" class="com.alibaba.mse.IHelloServiceImpl"/> <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" /> </beans>
Le tableau suivant décrit la configuration du fichier provider.xml.
| Élément | Description |
xmlns, xmlns:xsi, xmlns:dubbo et xsi:schemaLocation |
Déclare l'espace de noms XML Spring (xmlns) et l'instance de schéma XML (xmlns:xsi), ainsi que l'espace de noms Dubbo (xmlns:dubbo) et l'instance de schéma (xsi:schemaLocation). |
dubbo:application |
Nom de l'application fournisseur. Cet exemple utilise demo-provider. |
dubbo:protocol |
Publie le service via le protocole dubbo sur le port 28082. |
dubbo:service et bean |
Exposent l'interface IHelloService et la classe d'implémentation IHelloServiceImpl en tant que service Dubbo. |
dubbo:registry |
Spécifie l'instance Nacos que vous avez créée sur MSE en tant que registre de services. L'adresse correspond à l'endpoint public de l'instance. |
Étape 3 : Autoriser le fournisseur à accéder à l'instance MSE
Le fournisseur atteint le registre via l'endpoint public de l'instance MSE ; la liste d'autorisation de l'instance doit donc autoriser ce trafic. Effectuez cette étape avant de démarrer le fournisseur. Sinon, l'enregistrement échouera.
Dans la console MSE, dans le volet de navigation de gauche, choisissez . Sur la page Instances, cliquez sur l'instance MSE que vous avez créée.
Effacez la liste d'autorisation de l'instance. Si vous ne spécifiez aucune adresse IP ni aucun masque, toutes les adresses peuvent accéder à l'instance. Ce tutoriel utilise une liste d'autorisation vide à titre d'exemple. Pour plus d'informations, consultez Définir une liste d'autorisation.
Une liste d'autorisation vide permet à toutes les adresses d'accéder à l'instance MSE.
Étape 4 : Démarrer le fournisseur et vérifier l'enregistrement
Dans cette étape, vous démarrez le fournisseur et confirmez dans la console MSE que le service est enregistré auprès de l'instance Nacos.
-
Dans
com.alibaba.mse, créez une classe nomméeProvider. Utilisez le code suivant pour charger le contexte Spring dans la méthodemaindeProvideret exposer le service Dubbo que vous avez configuré.package com.alibaba.mse; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"}); context.start(); System.in.read(); } } Exécutez la méthode
maindeProviderpour démarrer le service. Maintenez le processus en cours d'exécution jusqu'à la fin du tutoriel, car le consommateur appellera ce processus.Dans la console MSE, sur la page des détails de votre instance MSE, choisissez dans le volet de navigation de gauche.
Vérifiez que la liste des services contient
com.alibaba.mse.IHelloService, l'interface exposée par l'applicationdemo-provider.
Ne passez pas à l'étape suivante tant que l'interface n'apparaît pas dans la liste des services. Si l'interface n'apparaît pas, vérifiez les configurations suivantes :
Liste d'autorisation — La liste d'autorisation de l'instance MSE autorise l'adresse de votre machine locale. Une liste d'autorisation vide autorise toutes les adresses.
Adresse du registre — L'adresse
dubbo:registrydansprovider.xmlutilise l'endpoint public de votre instance, et non l'espace réservémse.XX.nacos.mse.aliyuncs.com.Type de registre — L'adresse
dubbo:registryutilise le schéma correspondant au type d'instance que vous avez créé, par exemplenacos://pour une instance MSE Nacos.
Étape 5 : Créer le consommateur et s'abonner au service
Dans cette étape, vous créez un second projet Maven pour le consommateur, vous abonnez à com.alibaba.mse.IHelloService via la même instance MSE Nacos et implémentez la classe qui appelle le fournisseur.
Dans votre IDE, créez un second projet Maven pour le consommateur.
Ajoutez les dépendances
dubboetnacos-clientau fichierpom.xmldu projet consommateur. Les dépendances sont identiques à celles du projet fournisseur de l'étape 1.Dans le répertoire
src/main/java, créez le packagecom.alibaba.mseet ajoutez l'interfaceIHelloServiceque vous avez définie à l'étape 1. Le consommateur référence le service par son interface ; celle-ci doit donc figurer dans le classpath du projet consommateur.-
Dans le répertoire
src/main/resourcesdu projet consommateur, créez un fichier nomméconsumer.xml. Remplacezmse.XX.nacos.mse.aliyuncs.compar l'endpoint public de votre instance Nacos, qui est le même endpoint que celui configuré dansprovider.xml.<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <dubbo:application name="demo-consumer"/> <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" /> <dubbo:reference id="helloService" interface="com.alibaba.mse.IHelloService"/> </beans>L'élément
dubbo:registrypointe le consommateur vers le même registre que le fournisseur, et l'élémentdubbo:references'abonne à l'interfacecom.alibaba.mse.IHelloServiceexposée par le fournisseur. -
Dans
com.alibaba.mse, créez une classe nomméeConsumer. Utilisez le code suivant pour charger le contexte Spring dans la méthodemaindeConsumeret appeler la méthodesayHellodu service abonné.package com.alibaba.mse; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Consumer { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"}); context.start(); IHelloService helloService = (IHelloService) context.getBean("helloService"); System.out.println(helloService.sayHello("mse")); } }
Étape 6 : Vérifier l'appel du consommateur vers le fournisseur
Dans cette étape, vous confirmez que le consommateur découvre le fournisseur via le registre MSE Nacos et reçoit la réponse de la méthode sayHello. Le consommateur transmet mse en tant qu'argument, et IHelloServiceImpl renvoie hello suivi de cet argument.
Confirmez que le processus fournisseur démarré à l'étape 4 est toujours en cours d'exécution.
Exécutez la méthode
maindeConsumer.-
Vérifiez la sortie de la console du projet consommateur. La sortie suivante indique que le consommateur a appelé le fournisseur avec succès :
hello mse
Si l'appel échoue ou si aucune sortie n'est renvoyée, vérifiez les configurations suivantes :
Disponibilité du fournisseur — Le processus fournisseur est en cours d'exécution et
com.alibaba.mse.IHelloServiceapparaît dans la liste des services de l'instance MSE.Adresse du registre — L'adresse
dubbo:registrydansconsumer.xmlcorrespond à l'endpoint public que vous avez configuré dansprovider.xml.Nom de l'interface — L'interface dans l'élément
dubbo:referencedeconsumer.xmlcorrespond àcom.alibaba.mse.IHelloService, qui est l'interface dans l'élémentdubbo:servicedeprovider.xml.Liste d'autorisation — La liste d'autorisation de l'instance MSE autorise l'adresse de votre machine locale.