Zuul ist ein Load-Balancer, der auf JVM-Routing und serverseitiger von Netflix erzeugter Server-Seite basiert.
Zuul Funktionen:
Zuuls Regeln-Engine ermöglicht das Schreiben von Regeln und Filtern durch jede JVM-Sprache und unterstützt Java und Groovy-basierte Konstruktion.
Die Konfigurationseigenschaften Zuul.max.host.Connections wurden durch zwei neue Konfigurationseigenschaften ersetzt, Zuul.host.maxtotalConnections (Gesamtzahl der Verbindungen) und Zuul.host.maxPerRouteConnections (Anzahl der Verbindungen pro Route) haben Standardwerte von 200 bzw. 20.
1. Warum nutzen Sie das?
In Microservice -Systemen, die auf SpringCloud basieren, wird Gateway Zuul normalerweise verwendet, um einige Filtervorgänge wie die Überprüfung der Benutzer durchzuführen. Zum Beispiel speichert der Benutzer Token in den Header- oder URL -Parametern. Die Gateway -Ebene muss dieses Token verwenden, um die Benutzer -ID des Benutzers zu finden und in der Anforderung zu speichern, damit nachfolgende Mikrodienste direkt verwendet werden können, um Abfragen mit Token zu vermeiden.
2. Grundwissen
Die größte Verwendung in Zuul ist zusätzlich zum Routing, das Filter ist. Benutzerdefinierte Filter müssen die Schnittstelle Zuulfilter implementieren. In der Run () -Methode können Sie sie verwenden
RequestContext ctx = RequestContext.getCurrentContext (); HttpServletRequest request = ctx.getRequest ();
Erhalten Sie die Anfrage, aber es gibt nur GetParameter () in der Anforderung, aber keine SetParameter () -Methode, sodass es nicht möglich ist, den URL -Parameter direkt zu ändern. Obwohl SetAttribute () in Requeust verwendet werden kann, kann es aufgrund der verschiedenen Bereiche möglicherweise nicht in nachfolgenden Mikrodiensten erhalten werden, daher muss das hier eingestellte Attribut nicht in nachfolgenden Mikrodiensten erhalten werden, sodass eine andere Methode berücksichtigt werden muss.
3. Spezifische Praktiken
Die endgültige Methode ist die Verwendung
ctx.setRequest (New httpServletRequestWrapper (Anfrage) {})Der Weg zur Rekonstruktion der Anfrage im Kontext ist der Code wie folgt:
importieren javax.servlet.http.httpServletRequestWrapper; // userID -Try {InputStream in = ctx.getRequest (). GetInputStream (); String body = streamutils.copyToString (in, charset.forname ("utf-8")); System.out.println ("Körper:" + Körper); JsonObject json = jsonObject.fromObject (Körper); json.put ("userId", userId); String newbody = json.toString (); System.out.println ("neukörper:" + neukörper); Final Byte [] reqbodyBytes = newbody.getBytes (); ctx.setRequest (new httpServletRequestWrapper (Anfrage) {@Override public servletInputStream aus löscht ioException {return neuer servletInputStreamWrapper (reqbodyBytes); getContentLengthlong () {return reqbodyBytes.length; } catch (ioException e) {e.printstacktrace (); }Die Idee ist, den angeforderten Eingabestream zu erhalten und ihn neu zu schreiben, dh die JSON -Parameter umschreiben.
Bei nachfolgenden Microservice -Controllern können Formen verwendet werden
@RequestBody Map <String, Object> Body ====== Body.get ("userId");Auf diese Weise lassen Sie die BenutzerID in Zuulfilter übergeben
Vier. Einige Versuche
Als ich den httpServletRequestWrapper umschreibe, habe ich versucht getParameterNames() -Methoden getParameterMap() umzuschreiben, in der Hoffnung, die URL -Parameter neu zu schreiben, aber es wurde nicht wirksam.
Zusammenfassen
Das obige ist die Methode zur Änderung der Anforderungsparameterinformationen in SpringCloud, die Ihnen vom Editor vorgestellt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!