Spring Cloud ist ein Tool zur Entwicklung von Cloud -Anwendungen, die auf Spring Boot basieren. Es bietet eine einfache Entwicklungsmethode für Konfigurationsmanagement, Service-Erkennung, Leistungsschalter, intelligente Routing, Mikroagenten, Steuerbus, globale Schlösser, Entscheidungskampagnen, verteilte Sitzungen und Cluster-Staatsmanagement, die an der Entwicklung von JVM-basierten Cloud-Anwendungen beteiligt sind. Verpackung und Abschirmung komplexe Konfigurationen und Implementierungsprinzipien im Spring -Boot -Stil und letztendlich den Entwicklern ein einfaches, leicht zu verstehenes, einfach zu bereitgestelltes und einfach zu verwaltendes verteiltes Systementwicklungs -Toolkit.
Die Spring Cloud umfasst mehrere Subprojekte (für mehrere verschiedene Open -Source -Produkte, die an verteilten Systemen beteiligt sind), wie z.
Projektadresse: https://github.com/yuezhongxin/spring-cloud-consul-sprobe
Implementierung von ASP.NET Core 2.0 & Docker & Konsul: https://github.com/yuezhongxin/hellodocker.sample
Die aktuelle Teststelle verwendet den ASP.NET -Kern, um Conusl und Fabio zu kombinieren, um einen Microservice -Cluster zu erstellen. Da die Kommunikation zwischen jedem Dienst auf dem HTTP-REST-Protokoll basiert, kann die Service-Implementierung Kreuzsprache sein. Lassen Sie uns einen Spring -Boot -Dienst entwickeln und dann mit Spring Cloud Consul den Dienst an den vorhandenen Cluster registrieren.
Das Java Development Tool, das ich intellij idee (macOS -Installationstutorial) ausgewählt habe, das derzeit sehr gut verwendet wird (Farbschema verwendet die Darcula des Systems, Schriftgröße 14), und das Java SDK benötigt zusätzliche Download und Installation (Version 10 I installiert).
Da ich intellij idee zum ersten Mal verwendet habe, werde ich den Prozess des Erstellens eines Projekts im Folgenden veröffentlichen.
Erstellen Sie zunächst ein Projekt (wählen Sie "Spring Initializr", Spring Boot -Projekt) und standardmäßig Java SDK 10 auswählen:
Geben Sie dann die grundlegenden Informationen des Projekts aus (Artefakt lautet "Spring-Cloud-Consul-Probe", andere sind der Standard):
HINWEIS: Maven ist ein Projektmanagement- und Konstruktionsinstrument, das drei Schlüsselkomponenten enthält: das Projektobjektmodell (POM), das Abhängigkeitsmanagementmodell, das Build -Lebenszyklus und die Bühne.
Der Unterschied zwischen Gruppen -ID und Artefakt -ID. Wenn Gruppen -ID als Unternehmen angesehen wird, kann die Artefakt -ID als Unternehmensabteilung angesehen werden, was der Beziehung zwischen Lösungen und Klassenbibliotheken in .NET etwas ähnlich ist. Beispielsweise lautet die Gruppen-ID eines Frühlings-Cloud-Projekts org.springframework.cloud , und die Artefakt-ID von Spring Cloud Consul ist spring-cloud-starter-consul-discovery .
Im Folgenden finden Sie den Projekttyp für Spring -Boot (wählen Sie die Webabhängigkeiten aus):
Geben Sie dann den Projektnamen und das Projektverzeichnis ein:
Klicken Sie dann auf "Finish" und es ist fertig.
Wie bei der Entwicklung einer ASP.NET -Kernanwendung müssen wir zuerst verschiedene Pakete verweisen, und dies gilt für Spring -Boot -Projekte. Da wir Maven für die Abhängigkeitsverwaltung verwenden, müssen wir die Abhängigkeiten in pom.xml konfigurieren und wie folgt konfigurieren:
<in <Stent> <GroupId> org.springFramework.boot </GroupId> <artifactID> Spring-Boot-Starter-Parent </artifactid> <version> 2.0.0.Release </Version> <RelativePath/> <!-Suchup-Eltern aus Repository-> </übergeordnet> <Personals> <RelativePaths> <! <project.build.sourceencoding> utf-8 </project.build.SourceCoding> <projekts <gruppeId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> <abhängigkeit> <gruppe> org.springFramework <SupructId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Actuator </artifactId> <Schops> kompilieren </scope> </abhängig> <Depopentcy> <CrupentId> org.springFramework.boot </gruppe <artifactid> feder-starter-test-test </artifact> <artifactId> feder-starter-test-test </artifact> <artifactId> Spring- </abhängig> </abhängig> <depeopyMmanagement> <abhängigkeit> <Depopenty> <gruppe> org.springFramework.cloud </Groupid> <artifactID> Spring-Cloud-Consul-Abhängigkeiten </artifactId> <version> 2.0.0.m7 </Version> <typs </abhängig> </abhängigManagement>
Die Referenz spring-cloud-starter-consul-discovery entspricht dem Feder-Cloud-Konsul, und der Referenz spring-boot-starter-actuator wird als Gesundheitsprüfung (Adresse /actuator/health ) verwendet. Darüber hinaus unterstützt Aktuator die Projektüberwachung und -verwaltung.
Lassen Sie uns hier über die Rolle von Knoten sprechen:
parent : Die übergeordnete Referenzkonfiguration erbt die übergeordnete Referenzkonfiguration.dependencies : Die aktuelle Referenzkonfiguration. Wenn die übergeordnete Referenz konfiguriert ist, wird das untergeordnete Projekt automatisch verwiesen.dependencyManagement : Natürlich Referenzkonfiguration. Wenn die übergeordnete Referenz konfiguriert ist, wird das untergeordnete Projekt nicht automatisch verwiesen. Auf das Kinderprojekt muss nur bei der Verwendung verwiesen werden, und die Versionsnummer ist nicht erforderlich. Veröffentlichen Sie dann den Code von SpringCloudConsulSampleApplication.java :
Paket com.example.springCloudConsulsmast; import org.springframework.bean.factory.annotation org.springFramework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.cloud.client.discovery.enablesCoveryclient; org.springframework.cloud.client.discovery.DiscoveryClient;@enablediscoveryclient@rastController@SpringBootApplicationPublic Class SpringCloudConSamPleApplication {@autowired Private DiscoveryClient DiscoveryClient; /*** Alle Dienste erhalten*/@RequestMapping ("/dienste") öffentliche Objektdienste () {return DiscoveryClient.getServices (); } @RequestMapping ("/home") public String home () {return "Hallo Welt"; } public static void main (String [] args) {SpringApplication.run (SpringCloudConssampleApplication.Class, Args); }} Fügen Sie die @EnableDiscoveryClient Annotation hinzu. Wenn das Projekt beginnt, wird der aktuelle Spring Boot -Dienst registriert.
Bei der Registrierung eines Dienstes mit ASP.NET Core werden die Konfigurationsinformationen in den Code ausgefüllt (z. B. Dienstname und Port usw. und natürlich auch in der Konfigurationsdatei). Anschließend wird der Dienst über die Konsulkomponente (als Konsul -HTTP -REST bezeichnet) registriert.
Wenn Sie einen Dienst bei Spring Cloud Consul registrieren, müssen Sie eine Konfigurationsdatei hinzufügen (Spring Start -Projektressourcendatei befindet sich im Ressourcenverzeichnis).
Konfiguration in application.properties hinzufügen:
Spring.Application.Name = Spring-Boot-Service
Fügen Sie dann die Konfigurationsdatei application.yml hinzu:
Then add the application.yml configuration file: debug: trueserver: port: 24543spring: cloud: consult: host: 127.0.0.1 port: 8500 discovery: register: true hostname: 10.9.10.215 serviceName: ${spring.application.name} healthCheckPath: /actuator/health healthCheckInterval: 15s tags: urlprefix-/$ {spring.application.name} InstanceId: $ {spring.application.name}: $ {vcap.application.instance_id: $ {spring.application.instance_id: $ {random.Value}}}}}}}}}}}}Die obige Konfiguration muss ausführlich erläutert werden:
debug -Konfiguration ist, ob der Modus debuggen und ob sie verpackt und veröffentlicht werden soll, sie muss auf false eingestellt werden.server.port konfiguriert den Port des Spring -Boot -Dienstes.spring.cloud.consul.host/port konfiguriert die Adresse und den Port des lokalen Konsuls (sowohl Serverknoten als auch Clientknoten können verwendet werden). Spring Cloud Consul ruft die Konsul -HTTP -REST -Schnittstelle an, um den Dienst zu registrieren.spring.cloud.consul.discovery.true Konfiguriert, ob ein Dienst beim Starten registriert werden soll,spring.cloud.consul.discovery.hostname Konfiguriert die Host -Adresse des Spring -Boot -Dienstes oder kann ohne die Konfiguration konfiguriert werden, und die Standardadresse ist.spring.cloud.consul.discovery.serviceName konfiguriert den Dienstnamen des registrierten Konsuls. Die Variable ${spring.application.name} ist die Konfiguration, die wir in der oben genannten Konfigurationsdatei application.properties hinzugefügt haben.spring.cloud.consul.discovery.healthCheckPath Konfiguriert die Konsul -Gesundheitsprüfung. Die Aktuatorkomponente hilft uns bei der Implementierung, sodass wir keine zusätzliche Implementierung benötigen. Die Adresse ist in den Druckinformationen zu sehen, wenn der Dienst gestartet wird.spring.cloud.consul.discovery.healthCheckInterval Konfigurieren der Konsulgesundheitsüberprüfung, dh Herzbeatfrequenz.spring.cloud.consul.discovery.tags konfiguriert die Tags des Konsulregistrierungsdienstes, auf das Format von urlprefix-/serviceName eingestellt und wird automatisch im Fabio-Cluster registriert.spring.cloud.consul.discovery.instanceId Configures Consul Registration Service ID.Nach Abschluss der oben genannten Arbeiten müssen wir auch die Konsul und Fabio vor Ort starten
Dann können wir das Projekt direkt mit der Intellij -Idee debuggen und Shift + F9 zum Debuggen drücken.
In den oben genannten Druckinformationen des Aktuators wurde erwähnt:
2018-03-28 10: 09: 54,645 Info 63482 --- [Haupt] sbaewswebmvcendpoInTHandlermaping: MADD "{[/Actuator/Health weibliche), Methoden=-2get. java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvcendpoinTHandRermaping $ OperationHandler.Handle (javax.servlet.http.httpserservletrequest, java.util.til.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.Lang.lang.lang.lang.lang.lang.lang.lang.lang.langsring
2018-03-28 10: 09: 54,646 Info 63482 --- [Haupt] sbaewswebmvcendpoInTHandlermaping: MADD "{[/Actuator/info weibliche), Methoden= 2GETE. java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvcendpoinTHandRermaping $ OperationHandler.Handle (javax.servlet.http.httpserservletrequest, java.util.til.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.Lang.lang.lang.lang.lang.lang.lang.lang.lang.langsring
2018-03-28 10: 09: 54,647 Info 63482 --- [Haupt] sbaewswebmvcendpoInTHandlermaping: MADK "{[/Actuator weibliche), Methoden=-2getellig. 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.webmvcendpoInthandLmapping.links (javax.servlet.http.httpervletrequest, javax.servlet.http.httpletRetResponde)))
Oder wir können Maven verwenden, um die Version zu verpacken und den Dienst mit dem Befehl zu starten. Sie können Maven in der Intellij -Idee verwenden, um es zu verpacken, oder den Befehl Maven verwenden, um ihn zu verpacken. Hier verwenden wir den Befehl maven, um ihn zu verpacken.
Wenn wir die Intellij -Idee installiert haben, wurde Maven automatisch installiert, aber das direkte Drücken mvn -v wird feststellen, dass der Befehl nicht gefunden werden kann, daher müssen wir die Umgebungsvariablen konfigurieren.
Mein eigenes Maven -Dateiverzeichnis ist /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3 , die in den Konfigurationseinstellungen der Intellij -Idee zu finden ist, und dann führen wir den folgenden Befehl aus:
$ export m2_home = "/applications/intellij idee.app/contents/plugins/maven/lib/maven3" && export path = $ path: $ m2_home/bin && chmod a+x "/applications/intellij idee
Überprüfen Sie dann, ob der Befehl maven wirksam wird:
$ MVN-VAPACHE MAVEN 3.3.9 (BB52D8502B132EC0A5A3F4C09453C07478323DC5; vendor: Oracle CorporationJava home: /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/HomeDefault locale: zh_CN_#Hans, platform encoding: UTF-8OS name: "mac os x", version: "10.13.2", arch: "x86_64", family: "mac"
Dann ändern wir debug:false in application.yml und verwenden Maven, um es zu verpacken (wechseln Sie das Verzeichnis auf pom.xml ):
$ MVN Clean Package -dmaven.test.skip = true [info] Scannen nach Projekten ... [info] [info] ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Spring-Cloud-Consul-Sample --- [Info] Löschen/Benutzer/Xishuai/Dokumente/Projektdateien/Testprojekt/Spring-Cloud-Consul-Sample/Ziel [Info] [Info] --- Maven-Ressources-Plugin: 3.0.1: Ressourcen (Standard-Resources) @ Spring-Cloud-Consum-Probe --- [Info] -Fo. Kopieren von 0 Ressource [Info] [Info] --- Maven-Compiler-Plugin: 3.7.0: Kompilieren Sie (Standardkompile) @ Spring-Cloud-Consul-Probe --- [Info] Erkannt-neu kompilieren Sie das Modul erneut! Maven-Ressourcen-Plugin: 3.0.1: TestResources (Standard-Testresources) @ Spring-Cloud-Consul-Probe --- [Info] TEST Ressourcen nicht kopieren maven-surefire-plugin:2.20.1:test (default-test) @ spring-cloud-consul-sample ---[INFO] Tests are skipped.[INFO][INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ spring-cloud-consul-sample ---[INFO] Building jar: /Users/xishuai/Documents/Project files/test Projekte/Spring-Cloud-Consul-Sample/Ziel/Spring-Cloud-Consul-Sample-0.0.1-Snapshot.jar [Info] [Info] --- Spring-Boot-Maven-Plugin: 2.0.0.Release: Repackage (Standard) @ Spring-Cloud-Consul-Sample-[Info] -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 3. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Das generierte JAR-Paket befindet sich im Zielverzeichnis mit der Datei spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar (Format ist项目名+ 版本号), und dann können wir den Dienst direkt starten:
$ Java-Jar Target/Spring-Cloud-Consul-Sample-0.0.1-Snapshot.jar2018-03-28 10: 33: 31.750 Info 63875 --- [Main] scaannotationConFigApplicationContext: regeReshing org. Start -up -Datum [Mi 28. März 10:33:31 CST 2018]; Wurzel des Kontextes HierarchyWarning: Eine illegale reflektierende Zugriffsoperation wurde aufgetreten Project/Spring-Cloud-Consul-Sample/Target/Spring-Cloud-Consul-Sample-0.0.1-Snapshot.jar! /Boot-inf/lib/spring-core-5.0.4.release.jar!/) Zu Methode java.lang.classloader.defineclass (java.lang.string, byte [], int, int, java.security.Protectiondomain) WARNUNG: Bitte überlegen Sie, dies an die Inhaber von orgs-Springframework zu berichten. Zugriffsoperationen: Alle illegalen Zugriffsvorgänge werden in einer zukünftigen Release2018-03-28 10: 33: 31.971 Info 63875-[Haupt] faautowiredAnnotationBeanPostProcessor: JSR-330 'Javax.inject.injectionBeanPostProcessor: JSR-330' Javax.inject.inject 'Annotation gefunden und unterstützt für das Autotowieren2018-03-28 10: 32. 63875 --- [main] trationDelegate $ beanpostProcessorChecker: Bean 'configurationPropertiesRebinderautoconfiguration' vom Typ [org.springFramework.Cloud berechtigt, von allen BeanPostProcessoren verarbeitet zu werden (z. B. nicht zum Auto-Proxieren in Frage kommen). ____ __ _ /// ___'_ __ _ _ (_) _ __ _ / / // () / ___ | '_ |' _ | // // // ___) | | _) | | | | | | || (_ | |))) '| ____ | .__ | _ | | _ | _ | | _/__, | //// ============================================= ___/ =/ _/ _/ :: fing boot :: (v2.0.0.release)
Überprüfen Sie, ob die Gesundheitsprüfung erfolgreich ist:
Überprüfen Sie, ob die Registrierung von Konsulservice erfolgreich ist:
Überprüfen Sie, ob der Fabio -Cluster Dienste enthält:
Nachdem die Service -Registrierung erfolgreich ist, können wir den Service manuell erkennen oder über die Feder -Cloud -Band-/Tet -Komponente ermitteln und Lastausgleichsfunktionen (ähnlich der Fabio -Funktion) bereitstellen und später untersuchen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.