Einführung
Spring Cloud bietet eine hystrix fehlertolerante Bibliothek zur Implementierung einer Downgrade-Strategie für Methoden, die mit Leistungsschalter konfiguriert sind, wenn der Dienst nicht verfügbar ist, und rufen Sie vorübergehend alternative Methoden auf. In diesem Artikel wird ein Produktmikro -Service erstellt, sich beim Eureka Service Registration Center registriert. Anschließend verwenden wir die Web -Client -Access/Products -API, um die Produktliste zu erhalten, und wenn der Produktdienst fehlschlägt, wird die lokale Standby -Methode zur Heruntergrade aufgerufen, aber den Service normal anbietet.
Grundlegende Umgebung
GIT: Projektquellcode
Produktdienstleistungen hinzufügen
Erstellen Sie ein neues Maven -Projekt in Intellij unter Verwendung der folgenden Konfiguration
Fügen Sie dann den folgenden Code in pom.xml hinzu:
<? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.zxuqian</groupId> <artifactId>productService</artifactId> <version> 1.0-Snapshot </Version> <in <Strups> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Parent </artifactId> <version> 2.0.1.Release </version> <relativePath/> </parent> <properties> <project.build.sourceencoding> utf-8 </project.build.SourceEncoding> <java.version> 1.8 </java.version> </properties> <Depelences> <depelziee> <gruppe> org.springFramework.cloud </GroupID> <Epapts> <gruppe> org.springframework.cloud </GroupID> <Depelzy> </gruppen> org.springFramework.cloud </GroupID> </Groupid> </GroupID> </Groupid> </GroupID> </GroupID> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> <abhängigkeit> <gruppe org. <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.M9</version> <type>pom</type> <scope>import</scope> </dependency> </dependency> </dependency> </dependencyManagement> <build> <plugins> <gruppeId> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Maven-Plugin </artifactId> </plugin> </plugins> </build> <Repositories> <Repository> <id> Spring-Milestones </id> <name> Frühlingsfrocken-MILESTONEN </name> </name> </name> </name> </name> </name> <URL> https://repo.spring.io/libs-milestone </url> <snapshots> <enabled> false </enabled> </snapshots> </repository> </repository> </repositories> </project>
Wir verwendeten weiterhin Spring-Cloud-Starter-Netflix-Eureka-Client, damit Produkte und Dienstleistungen automatisch bei Eureka Services registriert werden können. Anschließend wird auch Spring-Cloud-Starter-Config verwendet, um die Konfigurationsdatei des Konfigurationsdienstzentrums zu lesen. Dieses Projekt ist nur ein einfaches Spring -Webprojekt.
Erstellen Sie eine Bootstrap.yml -Datei unter SRC/Main/Ressourcen und fügen Sie den folgenden Inhalt hinzu:
Frühling: Anwendung: Name: Produkt-Service Cloud: Konfiguration: URI: http: // localhost: 8888
Erstellen Sie die Produkt-service.yml-Datei im Git-Repository im Konfigurationszentrum und fügen Sie die folgende Konfiguration hinzu und senden Sie es ein:
Server: Port: 8081
Diese Konfiguration gibt an, dass der Produktdienstport 8081 beträgt. Erstellen Sie dann die Anwendungsklasse und fügen Sie den folgenden Code hinzu:
Paket cn.zxuqian; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootApplication; void main (String [] args) {SpringApplication.run (application.class, args); }}Die @enablediscoveryClient Annotation unterrichtet die Spring Cloud, diesen Dienst automatisch bei Eureka zu registrieren. Erstellen Sie schließlich den Cn.Zxuqian.Controllers.ProductController -Controller, stellen Sie die /produkte API zur Verfügung und geben Sie die Beispieldaten zurück:
Paket cn.zxuqian.controllers; import org.springframework.web.bind.annotation.RequestMapping; Pullover, T-Shirt "; }}
Konfigurieren Sie den Web -Client
Öffnen Sie das Webprojekt, das wir zuvor erstellt haben, und fügen Sie pom.xml eine neue Hytrix -Abhängigkeit hinzu:
<Depopentcy> <gruppe> org.springFramework.cloud </Groupid> <artifactId> Spring-Cloud-Starter-Netflix-Hystrix </artifactid> </abhängig>
Aktualisieren Sie dann den Code der Anwendungsklasse:
Paket cn.zxuqian; import org.springframework.boot.springApplication; import org.springframework.boot.autoconFigure.springbootApplication; importieren org.springFramework.boot.web.client.resttemplateBuilder; org.springframework.cloud.client.circuitbreaker.enableCircuitbreaker; import org.springframework.cloud.client.discovery.enablediscoveryclient; import org.springframework.context.annotation.bean; org.springframework.web.client.restTemplate;@EnableCircuitbreaker@enablediscoveryClient@SpringBootApplicationPublic Class Application {public static void main (String [] args) {SpringApplication.run (application.class.class, args); } @Bean public rastTemplate rest (rastTemplateBuilder Builder) {return Builder.build (); }}Hier wird @EnableCircuitbreaker verwendet, um die Leistungsschalterfunktion zu aktivieren, und dann wird eine REST -Methode hinzugefügt und die @Bean -Annotation wird verwendet. Dieser Teil gehört zur Feder -Abhängigkeits -Injektionsfunktion. Die Methode, die das @Bean -Tag verwendet, zeigt Ihnen, wie Sie solche Objekte initialisieren. In diesem Beispiel wird beispielsweise RastTemplateBuilder verwendet, um ein RastTemplate -Objekt zu erstellen, das später im Dienst mit einem Leistungsschalter verwendet wird.
Erstellen Sie die Klasse cn.zxuqian.service.ProductService und fügen Sie den folgenden Code hinzu:
Paket cn.zxuqian.services; importieren com.netflix.hystrix.contrib.javanica.annotation.hystrixcommand; import org.springframework.bean.factory.Annotation org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.stereotype.Service; @Autowired Private DiscoveryClient DiscoveryClient; public productService (rastTemplate rastTemplate) {this.restTemplate = restTemplate; } @HyStrixCommand (fallbackMethod = "BackupproductList") public String productList () {list <ServiceInstance> Instances = this.discoveryClient.getInstances ("Product-Service"); if (Instanzen! } zurückkehren ""; } public String BackUproductList () {return "Jack, Pullover"; }} Der Grund für die Erstellung einer Dienstklasse ist, dass Hystrix nur in Klassen verwendet werden kann, die @Service oder @Component markiert werden, so dass die API, die nach Frühlingskontext bereitgestellt wird, normal verwendet werden kann. Dies wird später erklärt, wenn Sie tief in den Frühling gehen.
Nach Verwendung @HystrixCommand Annotation überwacht Hystrix die kommentierte Methode, nämlich Produktliste (die zugrunde liegende Ebene wickelt diese Methode, um die Überwachung zu erreichen). Sobald sich die Fehler dieser Methode zu einem bestimmten Schwellenwert ansammeln, wird der Leistungsschalter gestartet. Alle nachfolgenden Anfragen zur Aufrufen der Produktlistenmethode schließen fehl. Die von FallbackMethod angegebene Methode wird vorübergehend BackupproductList () bezeichnet, und wenn der Dienst wieder normal ist, wird der Leistungsschalter geschlossen.
In dieser Klasse verwenden wir auch DiscoveryClient, um die URI-Adresse des Produktdienstes zu finden, den Wert der Spring.Application.Anwendung zu verwenden. Da wir nur einen Produktdienst gestartet haben, müssen wir nur die URI -Adresse der ersten Instanz annehmen.
Anschließend verwenden wir RastTemplate, um auf die API des Produktdienstes zuzugreifen. Beachten Sie, dass hier die Konstruktorinjektion von Spring verwendet wird, dh die Methode, die wir mit @Bean kommentiert haben, wird verwendet, um die RESTTEMPLATE -Variable zu initialisieren, ohne dass wir sie manuell initialisieren. Die RESTTEMPLATE -Klasse bietet die Methode getForObject (), um auf andere REST -APIs zuzugreifen und die Ergebnisse in ein Objektformular einzuwickeln. Der erste Parameter ist die URI -Adresse der API, die zugegriffen werden soll, und der zweite Parameter ist der Typ des erhaltenen Ergebniss. Hier geben wir Zeichenfolge zurück, also übergeben wir sie an String.class.
Die Methode BackUpproductList () gibt die heruntergestuften Produktlisteninformationen zurück.
Erstellen Sie schließlich einen Controller cn.zxuqian.controllers.ProductController und fügen Sie den folgenden Code hinzu:
Paket cn.zxuqian.controllers; importieren cn.zxuqian.services.productService; import org.springframework.bean.factory.annotation.autowired; org.springframework.web.bind.annotation.restController; @restControllerPublic Class ProductController {@autowired private productservice productsservice; @RequestMapping ("/products") public String productList () {return productservice.productList (); }} Verwenden Sie hier ProductService, um Daten für den /produkten Pfad bereitzustellen.
prüfen
Zunächst verwenden wir den Spring-Boot: Ausführen von Plug-In, um den Configuration Center-Dienst, den Konfigurations-Server zu starten, dann Eureka-Server zu starten, dann den Produktservice zu starten und schließlich den Web-Client zu starten. Warten Sie eine Weile, bevor der Eureka -Service erfolgreich registriert ist, und besuchen Sie http: // localhost: 8080/produkte. Unter normalen Umständen erhalten wir das Ergebnis von Jacke, Jacke, Pullover und T-Shirt. Dann schließen wir den Produktservice und greifen dann auf denselben Weg zu, und wir erhalten das Ergebnis der Herabstufung: Jacke, Pullover
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.