Maison >Java >javaDidacticiel >Comment SpringBoot2.0 implémente l'appel à distance des services RPC
1. Introduction au framework Dubbo
1. Dépendances du framework
Description de la légende :
1) Les petits carrés dans la figure, Protocole, Cluster, Proxy, Service, Conteneur, Registre, Moniteur, représentent des couches ou des modules, les bleus indiquent les interactions avec l'entreprise, les verts n'interagissent qu'au sein de Dubbo.
2) Les carrés d'arrière-plan Consommateur, Fournisseur, Registre et Moniteur dans la figure représentent les nœuds de topologie logique de déploiement.
3) La ligne pointillée bleue sur la figure est appelée lors de l'initialisation, la ligne pointillée rouge est un appel asynchrone pendant l'exécution et la ligne continue rouge est appelée de manière synchrone lors de l'exécution.
4) La figure contient uniquement la couche RPC et n'inclut pas la couche Remoting dans son ensemble qui est implicite dans le protocole.
2. Description du rôle principal
1) Le fournisseur est le fournisseur de services qui expose les services
2) Le consommateur est le consommateur de services qui appelle les services distants (équilibrage de charge)
3) Le registre est le centre d'enregistrement pour l'enregistrement des services. et découverte (surveillance), battement de cœur, expulsion, rentrée)
4) Surveiller les consommateurs et les fournisseurs de services accumule le nombre d'appels et les heures d'appel dans la mémoire et envoie activement des données statistiques au centre de surveillance chaque minute.
5) Conteneur Conteneur Running Contaign: Remote Calling, Sérialisation
2. . Configuration de base
1) Configuration du fournisseur
<!-- 这里包含了Zookeeper依赖和Dubbo依赖 --> <dependency> <groupid>com.alibaba.boot</groupid> <artifactid>dubbo-spring-boot-starter</artifactid> <version>0.2.0</version> </dependency>
2) Configuration du consommateur
dubbo-consume:服务消费方 dubbo-provider:服务提供方 dubbo-common:公共代码块,Dubbo接口,实体类
3. Cas de démonstration
1. Invocation à distance du service1) Interface du service du fournisseur
Faites attention aux annotations ici com. alibaba.dubbo.config.annotation.Serviceserver: tomcat: uri-encoding: UTF-8 max-threads: 1000 min-spare-threads: 30 port: 7007 connection-timeout: 5000ms spring: application: name: block-dubbo-provider # Dubbo 配置文件 dubbo: application: name: block-dubbo-provider registry: address: 127.0.0.1:2181 protocol: zookeeper protocol: name: dubbo port: 20880 scan: base-packages: com.boot.consume2) Interface consommateur
Faites attention aux annotations ici
com.alibaba.dubbo.config.annotation.Referenceorg.springframework.stereotype.Service
server: tomcat: uri-encoding: UTF-8 max-threads: 1000 min-spare-threads: 30 port: 7008 connection-timeout: 5000ms spring: application: name: block-dubbo-consume # Dubbo 配置文件 dubbo: application: name: block-dubbo-consume registry: address: 127.0.0.1:2181 protocol: zookeeper
2. Configuration du délai d'attente de l'interface
@Service @Component public class DubboServiceImpl implements DubboService { private static Logger LOGGER = LoggerFactory.getLogger(DubboServiceImpl.class) ; @Override public String getInfo(String param) { LOGGER.info("字符参数:{}",param); return "[Hello,Cicada]"; } @Override public UserEntity getUserInfo(UserEntity userEntity) { LOGGER.info("实体类参数:{}",userEntity); return userEntity; } }2) Appel du consommateur
@Service public class ConsumeService implements DubboService { @Reference private DubboService dubboService ; @Override public String getInfo(String param) { return dubboService.getInfo(param); } @Override public UserEntity getUserInfo(UserEntity userEntity) { return dubboService.getUserInfo(userEntity); } }
3. Configuration multi-version de l'interface
1) Fournisseur de services
Deux versions. de la même interface sont implémentés. Remarque : version.
Version un :
@Service(timeout = 2000) @Component public class DubboServiceImpl implements DubboService { }
Version deux :
@Override public String timeOut(Integer time) { return dubboService.timeOut(time); }
2) Le consommateur appelle com.alibaba.dubbo.remoting.TimeoutException
@Service(version = "1.0.0") @Component public class VersionOneImpl implements VersionService { @Override public String getVersion() { return "{当前版本:1.0.0}"; } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!