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

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

WBOY
Libérer: 2023-05-11 20:22:04
avant
1325 Les gens l'ont consulté

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>
Copier après la connexion

2) Configuration du consommateur

dubbo-consume:服务消费方
dubbo-provider:服务提供方
dubbo-common:公共代码块,Dubbo接口,实体类
Copier après la connexion

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
Copier après la connexion
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
Copier après la connexion

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;
      }
    }
    Copier après la connexion
    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);
  }
}
Copier après la connexion
  • 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 {
    }
    Copier après la connexion

    Version deux :

     @Override
     public String timeOut(Integer time) {
       return dubboService.timeOut(time);
     }
    Copier après la connexion

    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}";
      }
    }
    Copier après la connexion

    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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal