Einführung
Zuul ist ein Netflix JVM-basierter Router und serverseitiger Load Balancer. Das am häufigsten verwendete Szenario besteht darin, den Nginx Reverse Proxy-Backend-Microservice für den Front-End-UI-Zugriff zu ersetzen.
Zuul verwendet das Band, um eine Instanz zu lokalisieren, die durch Erkennung weitergeleitet wird. Alle Anfragen werden mit dem Befehl hystrix ausgeführt, sodass der Fehler in der Hytrix -Metrik angezeigt wird.
HINWEIS: Zuul enthält nicht den Discovery-Client, daher muss für Service-basierte Routen eine der Routen im Klassenpfad bereitgestellt werden.
Zuul ist ein API -Gateway und eine Filterkomponente, die von Federwolke bereitgestellt wird. Es liefert die folgenden Funktionen:
In diesem Tutorial werden wir Zuul verwenden, um die Webanforderung/das Produkt an den entsprechenden Produktdienst zu leiten und einen Pre -Filter zu definieren, um zu überprüfen, ob Zuul weitergeleitet wurde.
Grundlegende Umgebung
Projektquellcode
klicken Sie hier
Erstellen Sie Zuul Service
Erstellen Sie ein Maven -Projekt in Intellij:
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>apiGateway</artifactId> <version> 1.0-Snapshot </Version> <in <Strups> org. Vorher: Spring-Cloud-Starter-ZuUul-> <artifactid> Spring-Cloud-Starter-Netflix-Zuul </artifactId> </abhängig> <abhängigkeit> <Groupid> org.springFramework <gruppeID> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Starter-Config </artifactId> </abhängig> <abhängigkeit> <gruppe> org.springFramework <gruppeID> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> </abhängig> </abhängig> </abhängig> <depeopcymanagement> </gruppies <artifactId> Spring-Cloud-Abhängigkeiten </artifactId> <version> finchley. <gruppeId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Maven-Plugin </artifactId> </plugins> </build> <Repositories> <Pepository> <ID> Spring-Milestones </id> <name> Spring-Meilensteine </name> </name> </name> </name> </name> </Name> <url>https://repo.spring.io/libs-milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repository> </repository> </repository> </repositories></project>
Es ist zu beachten, dass die Artefaktis von Zuul, die das Tutorial für die offizielle Website des Frühlings gegeben hat, Spring-Cloud-Starter-Zuul ist, was der Name der alten Version von Zuul ist. Es wurde in unserer Version von Finchley.m9 in der Version finchley.m9 umbenannt.
Fügen Sie src/main/ressourcen/bootstrap.yml -Datei hinzu und geben Sie Spring.Application.name an:
Frühling: Anwendung: Name: Zuul-Server
Erstellen Sie die Cn.Zxuqian.Application -Klasse:
Paket cn.zxuqian; import cn.zxuqian.filters.prefilter; import org.springframework.boot.springapplication; org.springframework.cloud.netflix.zuul.EnableZuulProxy;import org.springframework.context.annotation.Bean;@EnableZuulProxy@EnableDiscoveryClient@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public Prefilter prefilter () {return New Prefilter (); }}Hier wird @EnableZuulProxy verwendet, um einen Reverse -Proxy mit Zuul anzugeben und unsere Anforderung an den entsprechenden Server weiterzuleiten. Dann war Eurekas Service Discovery aktiviert. Zuul verwendet standardmäßig auch das Ribbon für den Lastausgleich, sodass Sie registrierte Dienste über Eureka entdecken können. Prefilter ist ein Präfilter, der einige Vorgänge vor der Bearbeitung der Anfrage durchführt. Sein Code ist wie folgt:
Paket cn.zxuqian.filters; import com.netflix.zuul.zuulfilter; import com.netflix.zuul.context.requestcontext; import com.netflix.zuul.exception.zuulexception; import org.slf4j.logger; javax.servlet.http.httpServletRequest; PRAFFILTER PUBLIC CLASS erweitert Zuulfilter {private statische Logger log = loggerfactory.getLogger (Prefilter.class); @Override public String filterType () {return "pre"; } @Override public int filterOrder () {return 1; } @Override public boolean sollte filter () {return true; } @Override public Object run () löscht ZuUlexception {RequestContext ctx = RequestContext.getCurrentContext (); HttpServletRequest request = ctx.getRequest (); log.info (string.format (" %s method request %s", request.getMethod (), request.getRequesturl (). toString ())); null zurückkehren; }} Filtertype - Es gibt vier eingebaute Filtertypen in Zuul, Pre, Route, Post und Irrtum, die vor, während, nach und nach einem Fehler darstellen.
Filterorder - Gibt die Reihenfolge an, in der der Filter ausgeführt wird.
Sollte filter - ob dieses Filter aktiviert werden soll.
Run - Die Geschäftslogik des Filters. Hier protokolle ich einfach die Anforderungsmethode und fordere den Pfad von Reqeuch an.
Erstellen Sie anschließend die Datei zuul-Server.yml im Git-Repository in unserem Konfigurationszentrum und fügen Sie die folgende Konfiguration hinzu:
Server: Port: 8083Zuul: Routen: Produkte: Pfad: /produkt /** ServiceID: Produktservice
Hier ist der Port von Zuul als 8083 konfiguriert, und dann werden alle / Produkte / Anfragen unserem Produktservice-Service zugeordnet. Wenn der ServiceID nicht konfiguriert ist, ist der Produktschlüssel standardmäßig der ServiceID. In unserem Beispiel enthält der ServiceID -so dass der ServiceID unten angegeben ist. Senden Sie nach Abschluss der Konfiguration an Git.
Aktualisieren Sie ProductService
Der URI von ProductService wurde ein wenig verändert, um es mehr mit dem Ruhestil zu gestalten:
@RequestMapping (" /list") public String productList () {log.info ("Zugriff auf /produkte Endpunkt"); Rückkehr "Mantel, Jacke, Pullover, T-Shirt";}Hier wird der Pfad @RequestMapping in /list geändert, das zuvor /Produkte waren.
Aktualisieren Sie den Web -Client
Fügen Sie ProductService in unserem Web -Client eine neue Methode hinzu:
public String productListzu () {return this.restTemplate.getforObject ("http: // Zuul-Server/produkt/list", string.class);}Dieses Mal fordern wir den Zuul-Server-Service direkt an und wird dann unsere Anfrage an den Produktservice-Dienst anfordern. Fügen Sie zum Schluss eine Anforderungsbearbeitungsmethode in den ProductController hinzu:
@RequestMapping ("/product/list") public String productListzu () {return productservice.productListzu ();};Wird verwendet, um Anfragen zu verarbeiten /zu listen und dann Methoden in der ProductService -Klasse aufzurufen.
prüfen
Verwenden Sie MVN Spring-Boot: Rennen Sie, um Konfigurations-, Registrierungs-, Zuulserver-, ProductService- und Webprojekte zu starten, dann den zweiten ProductService zu starten und verwenden Sie Server_Port = 8082 Spring-Boot: Run.
Besuchen Sie http: // localhost: 8080/produkt/liste mehrmals und zusätzlich zu den zurückgegebenen Ergebnissen im Browser sehen wir auch die folgenden Wörter im Befehlszeilenfenster von Zuulserver:
Methodenanforderung erhalten
In den Befehlszeilenfenstern der beiden Produktservices werden wir dann auch zufällige Auftritte sehen
Zugang zum Endpunkt /Produkte
Dies bedeutet, dass ZuulServer auch automatisch den Ausgleich lädt.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.