


Introduction à l'intégration des services distribués Dubbo dans le développement SpringBoot
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 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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Introduction à Jasypt Jasypt est une bibliothèque Java qui permet à un développeur d'ajouter des fonctionnalités de chiffrement de base à son projet avec un minimum d'effort et ne nécessite pas une compréhension approfondie du fonctionnement du chiffrement. Haute sécurité pour le chiffrement unidirectionnel et bidirectionnel. technologie de cryptage basée sur des normes. Cryptez les mots de passe, le texte, les chiffres, les binaires... Convient pour l'intégration dans des applications basées sur Spring, API ouverte, pour une utilisation avec n'importe quel fournisseur JCE... Ajoutez la dépendance suivante : com.github.ulisesbocchiojasypt-spring-boot-starter2 1.1. Les avantages de Jasypt protègent la sécurité de notre système. Même en cas de fuite du code, la source de données peut être garantie.

Scénario d'utilisation 1. La commande a été passée avec succès mais le paiement n'a pas été effectué dans les 30 minutes. Le paiement a expiré et la commande a été automatiquement annulée 2. La commande a été signée et aucune évaluation n'a été effectuée pendant 7 jours après la signature. Si la commande expire et n'est pas évaluée, le système donne par défaut une note positive. 3. La commande est passée avec succès. Si le commerçant ne reçoit pas la commande pendant 5 minutes, la commande est annulée. 4. Le délai de livraison expire et. un rappel par SMS est envoyé... Pour les scénarios avec des délais longs et de faibles performances en temps réel, nous pouvons utiliser la planification des tâches pour effectuer un traitement d'interrogation régulier. Par exemple : xxl-job Aujourd'hui, nous allons choisir

1. Redis implémente le principe du verrouillage distribué et pourquoi les verrous distribués sont nécessaires. Avant de parler de verrous distribués, il est nécessaire d'expliquer pourquoi les verrous distribués sont nécessaires. Le contraire des verrous distribués est le verrouillage autonome. Lorsque nous écrivons des programmes multithreads, nous évitons les problèmes de données causés par l'utilisation d'une variable partagée en même temps. Nous utilisons généralement un verrou pour exclure mutuellement les variables partagées afin de garantir l'exactitude de celles-ci. les variables partagées. Son champ d’utilisation est dans le même processus. S’il existe plusieurs processus qui doivent exploiter une ressource partagée en même temps, comment peuvent-ils s’exclure mutuellement ? Les applications métier d'aujourd'hui sont généralement une architecture de microservices, ce qui signifie également qu'une application déploiera plusieurs processus si plusieurs processus doivent modifier la même ligne d'enregistrements dans MySQL, afin d'éviter les données sales causées par des opérations dans le désordre, les besoins de distribution. à introduire à ce moment-là. Le style est verrouillé. Vous voulez marquer des points

Springboot lit le fichier, mais ne peut pas accéder au dernier développement après l'avoir empaqueté dans un package jar. Il existe une situation dans laquelle Springboot ne peut pas lire le fichier après l'avoir empaqueté dans un package jar. La raison en est qu'après l'empaquetage, le chemin virtuel du fichier. n’est pas valide et n’est accessible que via le flux Read. Le fichier se trouve sous les ressources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

Lorsque Springboot+Mybatis-plus n'utilise pas d'instructions SQL pour effectuer des opérations d'ajout de plusieurs tables, les problèmes que j'ai rencontrés sont décomposés en simulant la réflexion dans l'environnement de test : Créez un objet BrandDTO avec des paramètres pour simuler le passage des paramètres en arrière-plan. qu'il est extrêmement difficile d'effectuer des opérations multi-tables dans Mybatis-plus. Si vous n'utilisez pas d'outils tels que Mybatis-plus-join, vous pouvez uniquement configurer le fichier Mapper.xml correspondant et configurer le ResultMap malodorant et long, puis. écrivez l'instruction SQL correspondante Bien que cette méthode semble lourde, elle est très flexible et nous permet de

SpringBoot et SpringMVC sont tous deux des frameworks couramment utilisés dans le développement Java, mais il existe des différences évidentes entre eux. Cet article explorera les fonctionnalités et les utilisations de ces deux frameworks et comparera leurs différences. Tout d’abord, découvrons SpringBoot. SpringBoot a été développé par l'équipe Pivotal pour simplifier la création et le déploiement d'applications basées sur le framework Spring. Il fournit un moyen rapide et léger de créer des fichiers exécutables autonomes.

1. Personnalisez RedisTemplate1.1, mécanisme de sérialisation par défaut RedisAPI. L'implémentation du cache Redis basée sur l'API utilise le modèle RedisTemplate pour les opérations de mise en cache des données. Ici, ouvrez la classe RedisTemplate et affichez les informations sur le code source de la classe. Déclarer la clé, diverses méthodes de sérialisation de la valeur, la valeur initiale est vide @NullableprivateRedisSe

Cet article écrira un exemple détaillé pour parler du développement réel de dubbo+nacos+Spring Boot. Cet article ne couvrira pas trop de connaissances théoriques, mais écrira l'exemple le plus simple pour illustrer comment dubbo peut être intégré à nacos pour créer rapidement un environnement de développement.
