Zuul est un équilibreur de charge basé sur le routage JVM et le côté serveur produit par Netflix.
Fonctions Zuul:
Le moteur des règles de Zuul permet d'écrire des règles et des filtres via n'importe quelle langue JVM et prend en charge la construction Java et Groovy.
Les propriétés de configuration zuul.max.host.connections ont été remplacées par deux nouvelles propriétés de configuration, zuul.host.maxtotalconnections (nombre total de connexions) et zuul.host.maxperrouteconnections, (nombre de connexions par itinéraire) ont des valeurs par défaut de 200 et 20, respectivement.
1. Pourquoi utiliser ceci
Dans les systèmes de microservice construits sur SpringCloud, Gateway Zuul est généralement utilisé pour effectuer certaines opérations de filtrage telles que la vérification de l'utilisateur. Par exemple, l'utilisateur stocke les jetons dans l'en-tête ou les paramètres d'URL. La couche de passerelle doit utiliser ce jeton pour trouver l'utilisateur de l'utilisateur et le stocker dans la demande afin que les microservices ultérieurs puissent être utilisés directement pour éviter la requête avec les jetons.
2. Connaissances de base
La plus grande utilisation de Zuul s'ajoute au routage, qui est un filtre. Les filtres personnalisés doivent implémenter l'interface zuulfilter. Dans la méthode run (), vous pouvez l'utiliser
RequestContext ctx = requestContext.getCurrentContext (); HttpServLetRequest request = ctx.getRequest ();
Obtenez la demande, mais il n'y a que getParameter () dans la demande mais pas de méthode setParameter (), il n'est donc pas possible de modifier directement le paramètre URL. De plus, bien que SetAttribute () puisse être utilisé dans la demande, il se peut que, en raison des différentes lunettes, l'ensemble d'attribut ne peut pas être obtenu dans les microservices suivants, de sorte qu'une autre méthode doit être prise en compte.
3. Pratiques spécifiques
La méthode finale consiste à utiliser
ctx.setRequest (new httpsservletRequestwrapper (request) {})La façon de reconstruire la demande dans le contexte, le code est le suivant:
Importer javax.servlet.http.httpservletRequestwrapper; // Ajouter un userid try {inputStream dans = ctx.getRequest (). GetInputStream (); String body = streamUtils.copyToString (in, charset.forname ("utf-8")); System.out.println ("Body:" + Body); JSONObject JSON = JSONObject.FromObject (Body); json.put ("userId", userId); String newbody = json.toString (); System.out.println ("NewBody:" + NewBody); octet final [] reqbodytes = newbody.getBytes (); ctx.setRequest (new httpServLetRequestWrapper (request) {@Override public ServleTutStream getInputStream () lance ioException {return new ServleTinputStreamWrapper (reqBodyBytes);} @Override public int GetContentLength () {return reqbodyLed.Legment LongLeng {return reqbodytes.length;}}); } catch (ioException e) {e.printStackTrace (); }L'idée est d'obtenir le flux d'entrée demandé et de le réécrire, c'est-à-dire de réécrire les paramètres JSON.
Dans les contrôleurs de microservice ultérieurs, les formes peuvent être utilisées
@Requestbody map <string, objet> body ===== body.get ("userId");De cette façon, faites passer l'utilisateur à Zuulfilter
Quatre. Quelques tentatives
Lors de la réécriture du httpservletRequestwrapper, j'ai essayé de réécrire getParameterNames() et getParameterMap() , dans l'espoir de réécrire les paramètres d'URL, mais cela n'a pas pris effet.
Résumer
Ce qui précède est la méthode de modification des informations des paramètres de demande dans SpringCloud présentées par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!