Maison  >  Article  >  Java  >  Comment SpringBoot2.0 implémente l'appel à distance des services RPC

Comment SpringBoot2.0 implémente l'appel à distance des services RPC

WBOY
WBOYavant
2023-05-11 20:22:041285parcourir

1. Introduction au framework Dubbo

1. Dépendances du framework

Comment SpringBoot2.0 implémente lappel à distance des services RPC

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接口,实体类

Comment SpringBoot2.0 implémente lappel à distance des services RPC3. Cas de démonstration

1. Invocation à distance du service

1) Interface du service du fournisseur

Faites attention aux annotations ici com. alibaba.dubbo.config.annotation.Service

server:
 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.consume
2) 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

  • Cette configuration peut être configurée sur le fournisseur de services ou sur le consommateur de services. Voici une démonstration de la configuration sur le fournisseur. Remarque : délai d'attente 1) Annotation de l'interface de service

    @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) Interface de test

    Le délai d'attente du service génère une exception
  • 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

    via l'annotation @Reference(version), qui pointera vers différentes versions de l'implémentation de l'interface.

    @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!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer