Introduction
Zuul est un routeur basé sur Netflix JVM et un équilibreur de charge côté serveur. Le scénario le plus utilisé est de remplacer le microservice backend proxy inversé NGINX pour l'accès à l'interface utilisateur frontal.
Zuul utilise le ruban pour localiser une instance qui est transmise par Discovery, et toutes les demandes sont exécutées avec la commande Hystrix, de sorte que l'échec sera affiché dans la métrique Hystrix.
Remarque: Zuul n'inclut pas le client Discovery, donc pour les itinéraires basés sur ID de service, l'un des itinéraires doit être fourni dans le chemin de classe.
Zuul est une passerelle API et un composant de filtrage fourni par Spring Cloud. Il fournit les fonctions suivantes:
Dans ce didacticiel, nous utiliserons Zuul pour transmettre la demande / produit Web au service de produit correspondant et définirons un pré-filtre pour vérifier si Zuul a été transmis.
Environnement de base
Code source du projet
Cliquez ici
Créer un service Zuul
Créez un projet Maven dans Intellij:
Ajoutez ensuite le code suivant dans pom.xml:
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" 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> <proupId> CN.zXuqian </prandid> </ Modelversion> APIGIGE <Artif> CNACTID> <version> 1.0-snapshot </-version> <parent> <proupId> org.springframework.boot </proncId> <Artifactid> printemps-boot-starter-parent </ artifactid> <version> 2.0.1.release </-version> </parelneces> <fedency> <proupId> Org.spring Spring-Cloud-Starter-Zuul -> <ArtefactId> Spring-Cloud-Starter-Netflix-Zuul </Retifactid> </Dependency> <Dedency> <ProupId> Org.SpringFramework.cloud </prouprid> <Artifactid> Spring-Cloud-starter-netflix-eureka-client </ artifactid> <GroupId> org.springframework.cloud </proupId> <Artifactid> Spring-Cloud-Starter-Config </ Artifactid> </Dendency> <Dedency> <ProupId> org.SpringFramework.Boot </prouprid> <Artifactid> Spring-Boot-Starter-Actuator </Artifactid> </Dedency> <Dedency> <GroupId> org.springframework.boot </prôdId> <ArtifactId> printemps-boot-starter-web </ artifactid> </dependency> </dependency> </dependency> </dependency> <dependencymanagement> </pedences> <dependency> <proupId> org.springFramework.cloud </preptences> <ArtefactId> Spring-Cloud-Dependuces </ Artifactid> <DERSE> FINCHLEY.M9 </ Version> <Type> Pom </pype> <Cope> Import </cope> </Dependency> </Dependency> </Dependencymanagement> <Properties> <Java.Version> 1.8 </java.version> </propperties> <GroupId> org.springframework.boot </prôdId> <ArtifactId> Spring-Boot-Maven-Plugin </ ArfactId> </Glugins> </ Build> <Nom> Milestones de printemps </ Name> <Id> Spring-Milestones </id> <name> Spring Milestones </name> </name> <url> https://repo.spring.io/libs-milestone </url> <napshots> <veabled> false </veable> </napshots> </ Repository> </ Repository> </ Repository> </ Repository> </spopositorys> </prète>
Il convient de noter que l'artefactive de Zuul donnée par le tutoriel du site officiel du printemps est Spring-Cloud-Starter-Zuul, qui est le nom de l'ancienne version de Zuul. Il a été renommé Spring-Cloud-Starter-Netflix-Zuul dans notre version Finchley.M9.
Ajoutez le fichier SRC / Main / Resources / bootstrap.yml et spécifiez Spring.Application.name:
Spring: Application: Nom: Zuul-Server
Créez la classe CN.ZXUQIAN.Application:
package cn.zxuqian; importer cn.zxuqian.filters.prefilter; import org.springframework.boot.springApplication; import org.springframework.boot.autoconfigure.springbootapplication; importe org.springframework.cloud.client.discovery.enable org.springframework.cloud.netflix.zuul.enablezuulproxy; import org.springframework.context.annotation.bean; @ envablezuulproxy @ epablediscoveryclient @ SpringbootApplicationPublic Class application {public static void main (String [] args) {SpringApplication.Run (Application. } @Bean public Prefilter Prefilter () {return new Prefilter (); }}Ici @enablezuulproxy est utilisé pour spécifier un proxy inversé à l'aide de Zuul et transférer notre demande au serveur correspondant. Ensuite, la découverte de service d'Eureka a été activée. Zuul utilisera également le ruban pour l'équilibrage de charge par défaut, vous pouvez donc découvrir les services enregistrés via Eureka. Le préfiltre est un préfiltre qui effectue certaines opérations avant le traitement de la demande de demande. Son code est le suivant:
package cn.zxuqian.filters; import com.netflix.zuul.zuulfilter; import com.netflix.zuul.context.requestContext; import com.netflix.zuul.exception.slf4j.loggerfactory; importation; import; javax.servlet.http.httpservletRequest; public class Prefilter étend zuulfilter {private static logger log = loggerfactory.getLogger (prefilter.class); @Override public String filterType () {return "pre"; } @Override public int filterOrder () {return 1; } @Override public boolean aitfilter () {return true; } @Override Public Object Run () lève Zuulexception {requestContext ctx = requestContext.getCurrentContext (); HttpServLetRequest request = ctx.getRequest (); log.info (string.format ("% s de la méthode%% s", request.getMethod (), request.getRequestUrl (). toString ())); retourner null; }} FilterType - Il existe quatre types de filtres intégrés dans Zuul, Pre, Route, Post et Erreur, qui représentent avant, pendant, après et après une erreur.
Filtre Ordre - Spécifie l'ordre dans lequel le filtre est exécuté.
Devrait-il - s'il faut activer ce filtre.
Exécuter - la logique métier du filtre. Ici, je enregistre simplement la méthode de demande et le chemin de demande de demande de reqeust.
Ensuite, créez le fichier zuul-server.yml dans le référentiel GIT dans notre centre de configuration et ajoutez la configuration suivante:
Serveur: Port: 8083ZUUL: Itinéraires: Produits: Chemin: Path: Produit / ** ServiceId: Product-Service
Ici, le port de Zuul est configuré pour être 8083, puis tous / produits / demandes sont mappés sur notre service de service de produit. Si le ServiceId n'est pas configuré, la clé de produits sera le ServiceId par défaut. Dans notre exemple, le ServiceId inclut -, donc le serviceId est spécifié ci-dessous. Soumettez-vous à Git une fois la configuration terminée.
Mettre à jour ProductService
L'uri de ProductService a un peu changé pour le rendre plus conforme au style de repos:
@RequestMapping ("/ list") public String productList () {log.info ("Access to / Products endpoint"); retour "manteau, veste, pull, t-shirt";}Ici, le chemin correspondant à @RequestMapping est changé en / liste, qui était auparavant / produits.
Mettre à jour le client Web
Ajoutez une nouvelle méthode à ProductService dans notre client Web:
String public productListzuul () {return this.resttemplate.getforObject ("http: // zuul-server / produit / list", string.class);}Cette fois, nous demandons directement le service Zuul-Server, puis il procure notre demande au service de service produit. Enfin, ajoutez une méthode de traitement de la demande dans le produit Contrôleur:
@RequestMapping ("/ Product / list") public String ProductListzuul () {return productservice.productListzuul ();}Utilisé pour traiter les demandes / produits / liste, puis appeler des méthodes dans la classe ProductService.
test
Utilisez MVN Spring-Boot: Exécutez pour démarrer Configserver, Registry, ZuulServer, ProductsService et Web, puis démarrez le deuxième ProductService et utilisez Server_port = 8082 Spring-Boot: Exécuter.
Visitez http: // localhost: 8080 / produit / liste plusieurs fois, et en plus de voir les résultats renvoyés dans le navigateur, nous verrons également les mots suivants dans la fenêtre de ligne de commande de Zuulserver:
Obtenez la demande de méthode http: // xuqians-imac: 8083 / produit / liste
Ensuite, dans les fenêtres de la ligne de commande des deux services de produits, nous verrons également des apparences aléatoires
Accès aux points finaux / produits
Cela signifie que Zuulserver chargera également automatiquement l'équilibrage.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.