Table des matières- 1 Configuration XML de Dubbo
- 1.1 Fournisseur
- 1.1.1 Interface du fournisseur
- 1.1.2 Classe implémentant le fournisseur
- 1.1.2.1 Structure du projet
- 1.1.2.2 Fichier pom.xml
- 1.1.2.3 Interface implémentée
- 1.1.2.4 Fichier de configuration
- 1.1.2.4.1 Configuration XML
- 1.1.2.4.2 Utilisation d'annotations
- 1.1.2.5 Classe de démarrage
- 1.1.2.5.1 Lecture directe du fichier de configuration
- 1.1.2.5.2 Démarrage avec Main.main
- 1.1.3 Autres méthodes de configuration
- 1.2 Consommateur
- 1.2.1 Structure du projet
- 1.2.2 Fichier pom.xml
- 1.2.3 Interface et implémentation du consommateur
- 1.2.4 Configuration du consommateur
- 2 Dubbo-admin
- 2.1 Téléchargement
- 2.2 Configuration et génération
- 2.3 Démarrage du service
1 Configuration XML de Dubbo
1.1 Fournisseur
1.1.1 Interface du fournisseur
Illustration
pom.xml
<groupId>cn.jzh</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
Interface
public interface DemoService {
public String test (String msg);
}
1.1.2 Classe implémentant le fournisseur
1.1.2.1 Structure du projet
1.1.2.2 Fichier pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.jzh</groupId>
<artifactId>dubbo-service-impl</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>cn.jzh</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.12</version>
</dependency>
<!--<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>-->
<!-- Bibliothèque client pour accéder à Zookeeper -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- io/netty/channel/EventLoopGroup -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<!-- org/apache/curator/RetryPolicy -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
1.1.2.3 Interface implémentée
import cn.jzh.service.DemoService;
public class DemoServiceImpl implements DemoService {
@Override
public String test (String msg) {
return "dubbo reçoit le message"+msg;
}
}
1.1.2.4 Fichier de configuration
1.1.2.4.1 Configuration XML
applicationContext-dubbo.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- Nom de l'application -->
<dubbo:application name="dubbo-server"/>
<!-- Adresse et port du registre Zookeeper -->
<dubbo:registry address="127.0.0.1:2181" protocol="zookeeper"></dubbo:registry>
<!-- Port utilisé pour les services -->
<dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
<!-- Service exposé -->
<dubbo:service interface="cn.jzh.service.DemoService" ref="demoServiceImpl"></dubbo:service>
<bean id="demoServiceImpl" class="cn.jzh.service.impl.DemoServiceImpl"></bean>
</beans>
Explication des configurations :
<dubbo:service/>: Configuration du service, utilisé pour exposer un service.<dubbo:reference/>: Configuration de référence, utilisé pour créer une instance distante.<dubbo:protocol/>: Configuration du protocole utilisé par le service.<dubbo:application/>: Configuration de l'application.<dubbo:registry/>: Configuration du registre central.<dubbo:monitor/>: Configuration du système de monitoring.<dubbo:provider/>: Configuration du fournisseur.<dubbo:consumer/>: Configuration du consommateur.<dubbo:method/>: Configuration spécifique aux méthodes.<dubbo:argument/>: Configuration spécifique aux arguments.
1.1.2.4.2 Utilisation d'annotations
applicationContext-dubbo.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- Nom de l'application -->
<dubbo:application name="dubbo-server"/>
<!-- Adresse et port du registre Zookeeper -->
<dubbo:registry address="127.0.0.1:2181" protocol="zookeeper" ></dubbo:registry>
<!-- Port utilisé pour les services -->
<dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
<!-- Utilisation d'annotations -->
<dubbo:annotation package="cn.jzh.service.impl" />
</beans>
L'implémentation doit utiliser l'annotation @Service de Alibaba :
import cn.jzh.service.DemoService;
import com.alibaba.dubbo.config.annotation.Service;
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String test(String msg) {
return "dubbo reçoit le message"+msg;
}
}
1.1.2.5 Classe de démarrage
1.1.2.5.1 Lecture directe du fichier de configuration
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
context.start();
System.out.println("Démarrage réussi");
}
}
Après avoir lancé le service Zookeeper, le service peut être lancé. Si vous souhaitez garder le service actif, utilisez une méthode différente. Attention : il faut d'abord lancer Zookeeper.
1.1.2.5.2 Démarrage avec Main.main
La méthode officielle recommandée est com.alibaba.dubbo.container.Main.main().
Attention : le fichier de configuration applicationContext-dubbo.xml doit être placé dans le dossier resource/META-INF/spring/*.xml.
Exemple :
import com.alibaba.dubbo.container.Main;
public class App {
public static void main(String[] args) {
// Méthode recommandée
// Le fichier de configuration doit se trouver dans META-INF/spring/*.xml
Main.main(args);
}
}
1.1.3 Autres méthodes de configuration
En plus de la configuration XML, on peut aussi utiliser dubbo.properties. Si la configuration est simple, sans multiples registres ou protocoles, ou si plusieurs conteneurs Spring partagent la même configuration, dubbo.properties peut être utilisé comme configuration par défaut. Dubbo charge automatiquement dubbo.properties à la racine de la classe. On peut changer sa localisation en utilisant -Ddubbo.properties.file=xxx.properties.
Exemple de dubbo.properties :
# Nom de l'application
dubbo.application.name=dubbodemo-provider
# Adresse du registre
dubbo.registry.address=zookeeper://127.0.0.1:2181
# Exemple de registre de diffusion
# dubbo.registry.address=multicast://224.5.6.7:1234
# Adresse du protocole
dubbo.protocol.name=dubbo
dubbo.protocol.port=28080
Stratégie de surcharge :
- Les paramètres JVM (-D) sont prioritaires.
- La configuration XML est secondaire.
- Le fichier properties est final.
Remarques :
- Si plusieurs
dubbo.propertiesexistent, Dubbo en charge un aléatoirement. - L'id du protocole est utilisé comme identifiant par défaut.
1.2 Consommateur
1.2.1 Structure du projet
1.2.2 Fichier pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.jzh</groupId>
<artifactId>dubbo-consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>cn.jzh</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.12</version>
</dependency>
<!--<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>-->
<!-- Bibliothèque client pour accéder à Zookeeper -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- io/netty/channel/EventLoopGroup -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<!-- org/apache/curator/RetryPolicy -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
1.2.3 Interface et implémentation du consommateur
Interface
public interface ConsumerService {
void test();
}
Implémentation, notez que l'on utilise les annotations d'Alibaba :
import cn.consumber.service.ConsumerService;
import cn.jzh.service.DemoService;
import com.alibaba.dubbo.config.annotation.Reference;
public class ConsumerServiceImpl implements ConsumerService {
@Reference
private DemoService demoService;
@Override
public void test() {
// Appel de la fonction fournie par le fournisseur
System.out.println(demoService.test("Test de Dubbo"));
}
}
1.2.4 Configuration du consommateur
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- Nom de l'application -->
<dubbo:application name="dubbo-consumer"/>
<!-- Adresse et port du registre Zookeeper -->
<dubbo:registry address="127.0.0.1:2181" protocol="zookeeper" ></dubbo:registry>
<!-- <dubbo:reference id="demo" interface="DemoService" check="false" />-->
<!-- Configuration de l'annotation -->
<dubbo:annotation package="cn.consumber" />
<bean id="consumerImpl" class="cn.consumber.service.impl.ConsumerServiceImpl"></bean>
</beans>
2 Dubbo-admin
2.1 Téléchargement
Adresse de téléchargement de Dubbo-admin : https://github.com/apache/dubbo-admin/tree/master, récupérez la branche master et téléchargez le fichier zip.
Le dernier version de dubbo-admin utilise un modèle séparé front-end/back-end, donc il faut disposer d'un environnement Java et d'un environnement Node.js. Après avoir lancé le service, il faut également lancer l'interface web dubbo-admin-ui.
2.2 Configuration et génération
Ouvrez le service avec IDEA. Configurez l'adresse de Zookeeper dans dubbo-admin-service.
Configuration Zookeeper
admin.registry.address=zookeeper://127.0.0.1:2181
admin.config-center=zookeeper://127.0.0.1:2181
admin.metadata-report.address=zookeeper://127.0.0.1:2181
Configuration Nacos
#admin.registry.address=nacos://127.0.0.1:8848?group=DEFAULT_GROUP&namespace=public
#admin.config-center=nacos://127.0.0.1:8848?group=dubbo
#admin.metadata-report.address=nacos://127.0.0.1:8848?group=dubbo
Configurez le port par défaut, qui est 8080 par défaut mais peut provoquer des conflits. Les identifiants de connexion sont définis ci-dessous.
server.port=8001
admin.root.user.name=root
admin.root.user.password=root
Pour générer le package, il faut le faire au niveau supérieur, ce qui permettra de packager toutes les dépendances. Ensuite, lancez le service dubbo-admin-server.
2.3 Démarrage du service
Il faut d'abord lancer le service Zookeeper, sinon le démarrage échouera.
Après le démarrage, accédez à http://127.0.0.1:8080/Capture d'écran exemple
Si le service est arrêté, attendez 10 secondes avant de redémarrer, c'est une stratégie d'arrêt propre.