Maison >Java >javaDidacticiel >Introduction à l'intégration des services distribués Dubbo dans le développement SpringBoot

Introduction à l'intégration des services distribués Dubbo dans le développement SpringBoot

不言
不言avant
2018-10-15 15:23:022442parcourir

Le contenu de cet article est une introduction à l'intégration des services distribués Dubbo dans le développement SpringBoot. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Avant-propos

Lorsque SpringBoot était très populaire, le framework distribué d'Alibaba Dubbo a finalement été maintenu après avoir été suspendu pendant N ans pour des raisons inconnues. Dans les microservices précédents, la version maintenue par Dangdang, Dubbox, était utilisée et la méthode d'intégration utilisait également la méthode de configuration XML.

Avant la transformation

C'est ainsi que Dubbox était utilisé auparavant dans SpringBoot. Enregistrez d'abord brièvement les versions, Dubbox-2.8.4, zkclient-0.6, zookeeper-3.4.6.

Le fichier de configuration spring-context-dubbo.xml introduit dans le projet est le suivant :

<?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: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://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        ">
    <!-- 记录监控信息 -->
    <dubbo:monitor protocol="registry"/>
    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="spring-boot-pay" />
    <!-- 使用zookeeper注册中心暴露服务地址 subscribe 默认:true 是否向此注册中心订阅服务,如果设为false,将只注册,不订阅 check 默认:true 注册中心不存在时,是否报错    -->
    <dubbo:registry protocol="zookeeper" address="192.168.1.180:2181" check="false"/>
    <!-- 
               生产者配置 生产者  远程默认调用3次 参数 retries="2" async="true" 异步返回结果 默认是同步 timeout="10000" 毫秒
               用dubbo协议在20882端口暴露服务  固定线程池 10 启动时建立线程,不关闭,一直持有  负载均衡策略 轮询
     -->
    <dubbo:provider  timeout="10000"  threads="10" threadpool="fixed" loadbalance="roundrobin"/>
    <!-- name="dubbo" 协议名称   为防止被大量连接撑挂,可在服务提供方限制大接收连接数,以实现服务提供方自我保护。 host 部署外网设置为内网通信地址-->
    <dubbo:protocol name="dubbo" port="-1" dispatcher="all"  accepts="1000"   />
    
    <!-- 使用注解方式-->     
    <dubbo:annotation package="com.itstyle"/>
</beans>

La classe startup introduit les annotations suivantes :

@SpringBootApplication
@ImportResource({"classpath:spring-context-dubbo.xml"})
public class Application{
    private static final Logger logger = Logger.getLogger(Application.class);

    public static void main(String[] args) throws InterruptedException,
            IOException {
        logger.info("支付项目启动 ");
    }

}

Après transformation

Cependant, SpringBoot introduit un nouveau concept, Spring Boot Starter, qui réduit efficacement la complexité du processus de développement de projet et a un très bon effet sur la simplification des opérations de développement.

Le concept de starter

starter inclura toutes les dépendances utilisées, évitant ainsi les problèmes causés par les développeurs eux-mêmes qui introduisent des dépendances.

Il convient de noter que différents démarreurs sont conçus pour résoudre différentes dépendances, leurs implémentations internes peuvent donc être très différentes. Par exemple, le démarreur de jpa et le démarreur de Redis peuvent avoir des implémentations différentes. L'essence de Starter réside dans la synthèse, qui est une couche d'abstraction au niveau logique. Peut-être que ce concept est quelque peu similaire à Docker, car ils effectuent tous les deux une opération de "packaging". Si vous savez quel problème Docker doit résoudre, peut-être que vous l'êtes. peut faire une analogie avec Docker et starter.

Implémentation du démarreur

Bien que différents démarreurs aient des implémentations différentes, ils utilisent essentiellement les deux mêmes contenus : ConfigurationProperties et AutoConfiguration.

Parce que Spring Boot croit fermement au concept de « convention sur la configuration », nous utilisons ConfigurationProperties pour enregistrer nos configurations, et ces configurations peuvent avoir une valeur par défaut, c'est-à-dire lorsque nous n'écrasons pas activement la configuration d'origine. , la valeur par défaut prendra effet, ce qui est très utile dans de nombreuses situations.

De plus, ConfigurationProperties du démarreur permet également de rassembler toutes les propriétés de configuration dans un seul fichier (généralement application.properties dans le répertoire des ressources), nous disons donc adieu à l'enfer XML dans le projet Spring.

La logique globale du démarreur est Introduction à l'intégration des services distribués Dubbo dans le développement SpringBoot aussi forte que Dubbo. Bien sûr, il créera également son propre démarreur pour répondre à la popularité de Spring Boot.

Ici, nous utilisons la version la plus récente de Dubbo. Le pom.xml introduit ce qui suit :

<!-- dubbo 替换  dubbox-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.2</version>
</dependency>
<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<!-- curator-recipes 替换  zkclient-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.0.1</version>
</dependency>

configuration application.properties :

## dubbo springboot 配置
spring.dubbo.application.id=springboot_pay
spring.dubbo.application.name=springboot_pay
spring.dubbo.registry.address=zookeeper://192.168.1.127:2181
spring.dubbo.provider.threads=10
spring.dubbo.provider.threadpool=fixed
spring.dubbo.provider.loadbalance=roundrobin
spring.dubbo.server=true
spring.dubbo.protocol.name=dubbo

Ajoutez les annotations suivantes. à la classe de démarrage :

@EnableDubboConfiguration
@SpringBootApplication
public class Application{
    private static final Logger logger = Logger.getLogger(Application.class);

    public static void main(String[] args) throws InterruptedException,
            IOException {
        logger.info("支付项目启动 ");
    }

}

Configuration d'implémentation de l'interface exposée pertinente :

import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
@Service
@Component
public class AliPayServiceImpl implements IAliPayService {
      //省略代码
}

Démarrez enfin le service S'il est démarré avec succès et enregistré dans le centre d'enregistrement, la transformation est réussie. .

Supplément

Dubbo 2.6.1 est la première version publiée après avoir modifié la structure. Dubbo 2.6.0 a fusionné la branche Dubbox fournie par Dangdang.com.

Stratégie de version de Dubbo : deux versions majeures sont développées en parallèle, la 2.5.x est une version stable, et la 2.6.x est une version expérimentale avec de nouvelles fonctionnalités. Une fois les expériences sur la version 2.6 stables, la version 2.5 sera migrée.

Résumé

  • Original Dangdang Dubbox 2.8.4 remplacé par Dubbo 2.6.2

  • Original La configuration spring-context-dubbo.xml est remplacée par dubbo-spring-boot-starter 2.0.0

  • Le zkclient 0.6 d'origine est remplacé par curator-recipes 4.0.1

  • Zookeeper d'origine 3.4.6 mis à niveau vers zookeeper 3.5.3

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