Spring Cloud est un outil de développement d'applications cloud basé sur Spring Boot. Il fournit une méthode de développement simple pour la gestion de la configuration, la découverte de services, les disjoncteurs, le routage intelligent, les micro-agents, le bus de contrôle, les verrous mondiaux, les campagnes de prise de décision, les sessions distribuées et la gestion des états de cluster impliqués dans le développement de l'application cloud basée sur JVM. Repackageding and Shoullinging Complex Configurations and Implémentation Principes à travers le style de démarrage de Spring, laissant finalement aux développeurs une boîte à outils de développement de système distribuée simple, facile à comprendre, facile à déployer et facile à entretenir.
Spring Cloud comprend plusieurs sous-projets (pour plusieurs produits open source différents impliqués dans des systèmes distribués), tels que Spring Cloud Config, Spring Cloud Netflix, Spring CloudFoundry, Spring Cloud AWS, Spring Cloud Security, Spring Cloud Commons, Spring Cloud Zookeeper, Spring Cloud CLI et d'autres projets.
Adresse du projet: https://github.com/yuezhongxin/spring-cloud-consul-sample
Implémentation d'Asp.net Core 2.0 & Docker & Consul: https://github.com/yuezhongxin/hellodocker.sample
Le site de test actuel utilise ASP.NET Core pour combiner Conusl et Fabio pour construire un cluster de microservice. Étant donné que la communication entre chaque service est basée sur le protocole HTTP REST, la mise en œuvre du service peut être transversale. Développez un service de démarrage Spring, puis utilisons Spring Cloud Consul pour enregistrer le service au cluster existant.
L'outil de développement Java J'ai choisi IntelliJ Idea (MacOS Installation Tutoriel), qui est actuellement très bien utilisé (Color Scheme utilise le Darcula du système, la taille de la police 14), et le SDK Java a besoin d'un téléchargement et d'une installation supplémentaires (version 10 que j'ai installée).
Parce que j'ai utilisé Intellij Idea pour la première fois, je publierai le processus de création d'un projet en détail ci-dessous.
Tout d'abord, créez un projet (sélectionnez "Spring Initizr", Spring Boot Project) et sélectionnez Java SDK 10 par défaut:
Ensuite, remplissez les informations de base du projet (Artefact est "Spring-Cloud-Consul-échantillon", d'autres sont la valeur par défaut):
Remarque: Maven est un outil de gestion de projet et de construction qui contient trois composants clés: le modèle d'objet Project (POM), le modèle de gestion des dépendances, le cycle de vie de construction et l'étape.
La différence entre l'ID de groupe et l'ID d'artefact. Si l'ID de groupe est considéré comme une entreprise, l'artefact ID peut être considéré comme un département d'entreprise, ce qui est quelque peu similaire à la relation entre les solutions et les bibliothèques de classe dans .NET. Par exemple, l'ID de groupe d'un projet Spring Cloud est org.springframework.cloud , et l'ID d'artefact du consul de Cloud Spring est spring-cloud-starter-consul-discovery .
Ce qui suit est le type de projet Create Spring Boot (sélectionnez les dépendances Web):
Ensuite, remplissez le nom du projet et le répertoire du projet:
Cliquez ensuite sur "Terminer" et c'est fait.
Comme le développement d'une application Core ASP.NET, nous devons d'abord référencer divers packages, et il en va de même pour les projets de démarrage Spring. Parce que nous utilisons Maven pour la gestion des dépendances, nous devons configurer les dépendances dans pom.xml et les configurer comme suit:
<s parent> <proupId> org.springframework.boot </proupId> <ArtifActid> printemps-boot-starter-Parent </ artifactid> <version> 2.0.0.release </DERNIERDE> <RelativePath /> <! - Lookup Parent from Repository -> </parent> <proprities> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reportting.outputencoding> utf-8 </project.reportting.outputending> <java.version> 1.8 </java.version> </properties> <pèbres> <Dedency> <GroupId> org.springframework.boot </proupId> <Artifactid> printemps-boot-starter-web </lefactive> </dendency> <dependency> <proupId> org.springframework.cloud </proupId> <Artifactid> Spring-Cloud-Starter-Consul-Discovery </ArtifActid> </Dedency> <GroupId> org.springframework.boot </proupId> <Artifactid> printemps-boot-starter-actuator </ artifactid> <ccope> compile </ccope> </dendency> <dependency> <proupId> org.springframework.boot </proupId> <patild> Spring-boot-starter-test-test-test-test-test-test-test </ artifactive> </ scrote> Spring-boot-starter-test-test-test-test-test-test-test-test-test </ artifactive> </ scrote> Spring-Boot-starter-test-test-test-test-tost </Dependency> </Dependces> <DependencyManagement> <Dependces> <Dependency> <ProupId> org.springFramework.cloud </proupId> <ArtifActid> Spring-Cloud-Consul-Dependces </ Artifactid> <Dersion> 2.0.0.m7 </preedency> </Dependances> </ DependencyManagement>
La référence spring-cloud-starter-consul-discovery correspond à Spring Cloud Consul, et la référence spring-boot-starter-actuator est utilisée comme vérification de la santé (adresse /actuator/health ). De plus, l'actionneur prend également en charge la surveillance et la gestion des projets.
Parlons ici du rôle des nœuds:
parent : La configuration de référence des parents héritera de la configuration de référence parent.dependencies : la configuration de référence actuelle. Si la référence parent est configurée, le projet enfant sera automatiquement référencé.dependencyManagement : bien sûr, la configuration de référence. Si la référence parent est configurée, le projet enfant ne sera pas automatiquement référencé. Le projet enfant ne doit être référencé que lorsqu'il est utilisé et le numéro de version n'est pas requis. Publiez ensuite le code de SpringCloudConsulSampleApplication.java :
package com.example.springcloudconsulsample; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restController; import org.springframework.cloud.client.discovery.enablediscoveryclient; import; org.springframework.cloud.client.discovery.discoveryClient; @veablediscoveryclient @ restController @ SpringbootApplicationPublic Class SpringCloudConsulsampleApplication {@Autowired Private DiscoveryClientClientClientClient; / ** * Obtenez tous les services * / @RequestMapping ("/ Services") public Object Services () {return DiscoveryClient.getServices (); } @RequestMapping ("/ home") public String home () {return "Hello World"; } public static void main (String [] args) {SpringApplication.Run (SpringCloudConsulsampleApplication.class, args); }} Ajoutez l'annotation @EnableDiscoveryClient . Lorsque le projet commencera, le service de démarrage Spring actuel sera enregistré.
Lors de l'enregistrement d'un service à l'aide d'ASP.NET Core, les informations de configuration seront remplies dans le code (telles que le nom et le port du service, etc., et bien sûr, il peut également être dans le fichier de configuration), puis le service sera enregistré à l'aide du composant Consul (appelé consul http rest).
Si vous enregistrez un service avec Spring Cloud Consul, vous devez ajouter un fichier de configuration (Spring Boot Project Resource File est dans le répertoire des ressources).
Ajouter une configuration dans application.properties :
Spring.Application.Name = Spring-Boot-Service
Ajoutez ensuite le fichier de configuration application.yml :
Ensuite, ajoutez le fichier de configuration applicable.yml: Debug: TrueServer: Port: 24543Spring: Cloud: Consult: Host: 127.0.0.1 Port: 8500 Discovery: Register: true hostname: 10.9.10.215 ServiceName: $ {printemps.application.name} urlprefix - / $ {printemps.application.name} instanceId: $ {printemps.application.name}: $ {vcap.application.instance_id: $ {printemps.application.instance_id: $ {random.value}}}La configuration ci-dessus doit être expliquée en détail:
debug est de savoir s'il faut déboguer en mode, et s'il est emballé et publié, il doit être défini sur false .server.port configure le port du service Spring Boot.spring.cloud.consul.host/port configure l'adresse et le port du consul local (le nœud serveur et le nœud client peuvent être utilisés). Spring Cloud Consul appellera l'interface Consul HTTP REST pour enregistrer le service.spring.cloud.consul.discovery.true configure s'il faut enregistrer un service au démarrage,spring.cloud.consul.discovery.hostname configure l'adresse hôte du service de démarrage Spring, ou il peut être configuré sans la configuration, et l'adresse locale par défaut est.spring.cloud.consul.discovery.serviceName configure le nom du service de consul enregistré. La variable ${spring.application.name} est la configuration que nous avons ajoutée dans le fichier de configuration application.properties ci-dessus.spring.cloud.consul.discovery.healthCheckPath configure l'adresse de vérification de la santé du consul. Le composant de l'actionneur nous aide à l'implémenter, nous n'avons donc pas besoin d'une implémentation supplémentaire. L'adresse peut être vue dans les informations d'impression au démarrage du service.spring.cloud.consul.discovery.healthCheckInterval configure la fréquence de vérification de la santé du consul, c'est-à-dire la fréquence de battements cardiaques.spring.cloud.consul.discovery.tags configure les balises du service d'enregistrement du consul, définie sur le format d' urlprefix-/serviceName , et est automatiquement enregistré dans le cluster Fabio.spring.cloud.consul.discovery.instanceId configure le service d'enregistrement du consul ID.Une fois le travail ci-dessus terminé, nous devons également démarrer le consul et Fabio localement
Ensuite, nous pouvons déboguer directement le projet en utilisant IntelliJ Idea et appuyer sur Shift + F9 pour déboguer.
Les informations ci-dessus ont mentionné les informations d'impression de l'actionneur:
2018-03-28 10: 09: 54.645 Info 63482 --- [Main] sbaewswebmvcendpointhandlermapping: maphed "{[/actuator/health java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvcendpointhandlermapping $ operationhandler.handle (javax.servlet.http.httpservletrequest, java.string>)
2018-03-28 10: 09: 54.646 Info 63482 --- [Main] sbaewswebmvcendpointhandlermapping: maphed "{[/actuator/info java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvcendpointhandlermapping $ operationhandler.handle (javax.servlet.http.httpservletrequest, java.string>)
2018-03-28 10: 09: 54.647 Info 63482 --- [Main] sbaewswebmvcendpointhandlermapping: maphed "{[/actuator java.util.map <java.lang.string, java.util.map <java.lang.string, org.springframework.boot.actuate.endpoint.web.link >> org.springframework.boot.actuate.endpoint.web.servlet.webmvcendpointhandlermapping.links (javax.servlet.http.httpservletRequest, javax.servlet.http.httpservletRequest)
Ou nous pouvons utiliser Maven pour emballer la version et démarrer le service avec la commande. Vous pouvez utiliser Maven dans Intellij Idea pour l'emballer, ou utiliser la commande maven pour l'emballer. Ici, nous utilisons la commande maven pour l'emballer.
Lorsque nous avons installé Intellij Idea, Maven a été automatiquement installé, mais la frappe directement mvn -v constatera que la commande ne peut pas être trouvée, nous devons donc configurer les variables d'environnement.
Mon propre répertoire de fichiers Maven est /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3 , qui peut être trouvé dans les paramètres de configuration de l'idée IntelliJ, puis nous exécutons la commande suivante:
$ export m2_home = "/ applications / Intellij idea.app/contents/plugins/maven/lib/maven3" && export path = $ path: $ m2_home / bin && chmod a + x "/ applications / Intellij idea
Vérifiez ensuite si la commande maven prend effet:
$ mvn -vapache Maven 3.3.9 (BB52D8502B132EC0A5A3F4C09453C07478323DC5; 2015-11-11t00: 41: 47 + 08: 00) Maven Home: / Applications / Intellij Idea Vendor: Oracle CorporationJava Home: /Library/java/javavirtualmachines/jdk-10.jdk/contents/homedefault Locale: zh_cn_ # hans, plateforme Encoding: "x86_6os" Mac "," Mac ":" 10.13.2 "
Ensuite, nous modifions debug:false dans application.yml et utilisons maven pour le emballer (basculer le répertoire au niveau pom.xml ):
$ mvn package Clean -dmaven.test.skip = true [info] scanne pour les projets ... [info] [info] ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Spring-Cloud-Consul-échantillon --- [Info] Suppression / utilisateurs / Xishuai / Documents / Projet Fichiers / Test Project / Spring-Cloud-Consul-échantillon / Target [Info] [info] --- Maven-Resources-Plugin: 3.0.1: Ressources (Default-Resources) @ Spring-Cloud-Consul-échantillon - [Info] Utilisation de 'UTF-8' 'Encodant pour copier des ressources. Ressources [info] Copie 0 Ressource [info] [info] --- maven-compiler-plugin: 3.7.0: compile (par défaut-compositeur) @ Spring-Cloud-Consul-échantillon --- [Info] Modifications détectées - Recompilation du module! [Info] Compilant 1 fichier source à / utilisateurs / xishuai / Documents / Project Project / Test Project / Spring-Cloud-Con-Consul-Sample Sample / Target / Course [Info) maven-resources-plugin:3.0.1:testResources (default-testResources) @ spring-cloud-consul-sample ---[INFO] Not copying test resources[INFO][INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ spring-cloud-consul-sample ---[INFO] Not compiling test sources[INFO][INFO] --- Maven-Surefire-Plugin: 2.20.1: Test (Test par défaut) @ Spring-Cloud-Consul-échantillon --- [Info] Les tests sont ignorés. [Info] [Info] --- Maven-Jar-Plugin: 3.0.2: Jar (Default-Jar) Projets / Spring-Cloud-Consul-Sample / Target / Spring-Cloud-Consul-Sample-0.0.1-Snapshot.jar [info] [info] --- Spring-Boot-Maven-Plugin: 2.0.0.release: Repackage (par défaut) @ Spring-Coud-Consul-échantillon --- [Info] --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Le package JAR généré sera dans le répertoire cible, avec le fichier spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar (Format est项目名+ 版本号), puis nous pouvons démarrer le service directement:
$ Java -jar Target / Spring-Cloud-Consul-Sample-0.0.1-Snapshot.jar2018-03-28 10: 33: 31.750 Info 63875 --- [Main] scaannotationConfigApplicationContext: rafraîchissement org.springframework.contex [Mer 28 mars 10:33:31 CST 2018]; Racine de contexte HiérarchyWarning: Une opération d'accès réfléchissante illégale s'est produite Warning: Accès réflexive illégal par org.springframework.cglib.core.reflectutils 1 (jar: fichier: / users / xishuai / documents / project file / test Projet / Spring-Cloud-Consul-Sample / Target / Spring-Cloud-Consul-Sample-0.0.1-snapshot.jar! /Boot-inf/lib/spring-core-5.0.4.release.jar! /) À la méthode à la méthode java.lang.classloader.defineclass (java.lang.string, byte [], int, int, java.security.protectiondomain) Avertissement: veuillez envisager de le signaler aux mainteneurs de l'organisation OPÉRATIONS ACCESSAGE, ARRÊT: Toutes les opérations d'accès illégales seront refusées dans une future version2018-03-28 10: 33: 31.971 Info 63875 --- [Main] FaautowiredannotationBeanPostProcessor: JSR-330 'Javax.inject.inject' Annotation trouvée et prise en charge pour Autowiring2018-03-28 10: 33: 32.015 Info pour Autowiring2018-03-28 10: 33: 32.015 pour Autowiring2018-03-28 10: 33: 32.015 pour Autowiring2018-03-28 10: 33. 63875 --- [Main] trationdelegate $ beanpostprocessorchecker: bean 'ConfigurationPropertiesReBinderaToConfiguration' of Type [org.springframework.cloud.autoconfigure.configurationpropertiesrebindera être traité par tous lesprocesseurs BeanPost (par exemple: non éligible à l'auto-proxie). ____ __ _ /// ___'_ __ _ _ (_) _ __ __ _ / / / // (() / ___ | '_ |' _ | / // // // ___) | | _) | | | | | | || (_ | |)))) '| ____ | .__ | _ | | _ | _ | | _ / __, | / / / / ==================================.
Vérifiez si le bilan de santé est réussi:
Vérifiez si l'inscription des services Consul est réussie:
Vérifiez si le cluster Fabio contient des services:
Une fois l'enregistrement de service réussi, nous pouvons découvrir manuellement le service, ou le découvrir via le composant Ribbon / Feign Cloud Spring, et fournir des fonctions d'équilibrage de charge (similaires à la fonction Fabio), puis l'étudier plus tard.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.