Technologieaustausch

Tor

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Gateway-Kernkonzepte

1. Route
Routing ist der grundlegendste Teil des Gateways. Zu den Routing-Informationen gehören eine ID, ein Ziel-URI, eine Reihe von Assertionsfabriken und eine Reihe von Filtern. Wenn die Behauptung wahr ist, stimmt die angeforderte URL mit der konfigurierten Route überein.
2. Prädikate
     Assert-Funktion ermöglichtEntwickler definierenübereinstimmenin HTTP-AnfrageAlle Informationen wie Anforderungsheader und -parameter usw.
3. Filtern
Der Filter ist in Gateway-Filter und globalen Filter unterteilt. Filter kann Anfragen und Antworten verarbeiten.


Gateway-Schnellstart

1. Abhängigkeiten einführen
Hinweis: Es kommt zu Konflikten mit den Abhängigkeiten von spring-webmvc, daher muss spring-webmvc ausgeschlossen werden.
2. Schreiben Sie eine YML-Konfigurationsdatei
server.port = 8088 ist Gateway-Zugriffsport
spring.application.name ist Der Dienstname des aktuellen Gateway-Dienstes
Routing-Regeln werden unter „gateway.routes“ definiert:
id ist der Name dieser Routing-Regel. Unter „gateway.routes“ können viele Routing-Regeln vorhanden sein
URL (URL): Zugriff auf den Dienst des aktuellen Gateways, An welche URL soll weitergeleitet werden?Erstens kann ich nicht alle Anfragen an das Gateway weiterleiten. Bestimmte Bedingungen müssen erfüllt sein.
Prädikate: wann Die Anfrage erreicht das aktuelle Gateway(Also Diese Anfrage muss die IP + Portnummer des aktuellen Gateways enthalten. Informationen, gefolgt von einem Schrägstrich /, damit das Gateway standardmäßig angeben kann, dass diese Informationen verfügbar sind,Diese Informationen müssen nicht in Prädikaten berücksichtigt werden), Wenn die URL nach der Portnummer mit /order-serv/** beginnt,Also Leiten Sie einfach zur IP + Port der oben genannten URL weiter . und Schrägstrich /Alle nachfolgenden Pfade werden nicht entfernt, dann wird es an die Adresse http://localhost:8020/order-serv/order/add weitergeleitet
(order-serv ist der Dienstname, um zu verhindern, dass der Bestelldienst eine Adresse hat, die mit /order/add beginnt, und der Inventardienst auch eine Adresse hat, die mit /order/add beginnt, also An das Gateway gesendete Anfragen tragen den Namen des weiterzuleitenden Dienstes.),Aber Die vom Bestelldienst empfangene Anfrage enthält kein /order-serv/., nur die gesendete Anfrage ist http://localhost:8020/order/add, sodass sie empfangen werden kann. Lassen Sie das Gateway den Pfad der ersten Ebene entfernen, Präfixe durch Filter filtern
Wenn die Behauptung nicht erfüllt ist, wird ein 404-Fehler gemeldet.


Hier haben wir die weitergeleiteten URL-Adressen in der Konfiguration fest codiert. Wenn der Server migriert wird, oder der Server in einem Cluster bereitgestellt wird, muss ein Reverse-Proxy durchgeführt werden, was sehr problematisch ist .

Wir können diese Probleme leicht lösen, indem wir Gateway und Nacos integrieren

Integrieren Sie Nacos

1. Führen Sie weiterhin Nacos-Abhängigkeiten ein
2. Fahren Sie mit dem Schreiben der YML-Konfigurationsdatei fort
(1) Um Nacos zu integrieren, registrieren Sie einfach den aktuellen Gateway-Dienst bei Nacos und geben Sie die Nacos-Dienstadresse und das Kontokennwort ein
(2) Ändern Sie die Adresse des weiterzuleitenden Dienstes in den Routing-Regeln in den Dienstnamen „order-service“ (URL: order-service), und da Sie die Lastausgleichsstrategie des mit Nacos gelieferten Ribbons verwenden müssen, Fügen Sie also lb:// hinzu, lb bedeutet Loadbalancing-Lastausgleich.
GatewayDas Gateway ersetzt den gesamten „Bestelldienst“ durch die IP-Adresse eines der Bestelldienste (da das Gateway regelmäßig die IP-Adressliste verschiedener bei Nacos registrierter Dienste abruft).
Dies löst das Problem, dass Nginx für den Reverse-Proxy und den Lastausgleich verwendet werden muss, wenn der Server migriert wird, sich die IP-Adresse ändert oder der Server in einem Cluster bereitgestellt wird.
Abgekürzte Routing-Regeln: Vereinbarung ist größer als Konfiguration
(1) Nach dem Aktivieren der Funktion zur automatischen Identifizierung von Nacos-Diensten besteht keine Notwendigkeit, Behauptungsregeln zu schreiben.
(2) Wenn eine an das Gateway gesendete Anfrage mit einem auf Nacos registrierten Dienstnamen beginnt, wird sie automatisch an einen Server dieses Dienstes weitergeleitet und der Pfad der ersten Ebene wird automatisch herausgefiltert (Nachteil: Routing-Regeln sind nicht flexibel genug)
Zu diesem Zeitpunkt können Sie eine erfolgreiche Antwort erhalten, solange Sie entsprechend dem Format Gateway-Adresse/Mikroservice/Schnittstelle darauf zugreifen.


Behauptungsfabrik

Das Erstellen von Behauptungen basierend auf der URL ist die integrierte Behauptungsfabrik des Gateways.



Benutzerdefinierte Routing-Assertion-Factory

Hier wird davon ausgegangen, dass Sie eine Assertionsfabrik basierend auf Abfrageanforderungsparametern anpassen, den Inhalt im Quellcode kopieren und ihn dann nach Bedarf ändern.

anpassen Eine Assertionsfabrik basierend auf Abfrageanforderungsparametern, Sie müssen die AbstractRoutePredicateFactory-Klasse erben und die Logik der Apply-Methode neu schreiben. In der Apply-Methode können Sie das ServerHttpRequest-Objekt über Exchange.getRequest () abrufen, sodass Sie die Anforderungsparameter, die Anforderungsmethode, den Anforderungsheader und andere Informationen abrufen können.
1. Es muss eine Federkomponente sein, also eine Bohne
2. Die Klasse muss hinzugefügt werden Routenprädikatsfabrik als Ende
3. Muss vererbt werden AbstrakteRoutePrädikatFabrik
4. Sie müssen eine statische innere Klasse und Attribute deklarieren, um die entsprechenden Assertionsinformationen in der Konfigurationsdatei zu erhalten.
5. Müssen kombiniert werden VerknüpfungFeldReihenfolge Binden
6. Verwenden Sie „Apply“, um logisch zu beurteilen, ob „true“ eine erfolgreiche Übereinstimmung oder „false“ eine fehlgeschlagene Übereinstimmung ist.


Filtern (zuerst filtern, dann weiterleiten)

(1) Verarbeiten Sie zunächst die angeforderte URL-Adresse durch den Filter oder fügen Sie einige Informationen wie Anforderungsheader, Cookies usw. hinzu, löschen Sie sie und ändern Sie sie.

(2) Leiten Sie dann über die Nacos-Dienstliste zum entsprechenden Server weiter

Die Rolle des Filters: Wenn eine Anfrage beim Gateway eintrifft, können wir die Anfrage mit Geschäftslogik verarbeiten.

Zum Beispiel:

(1) Führen Sie den Filter durch die VorderseiteEntfernen Sie die erste Pfadebene

(2) Sie können allen an das Gateway eingehenden Anforderungen einen Anforderungsheader hinzufügen und dann den darin enthaltenen Inhalt festlegen.

(3) Sie können ein Cookie für alle Anfragen setzen, die an das Gateway usw. gehen.

Einzelheiten zu allen integrierten Filtern finden Sie auf der offiziellen Website

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories

Hier sind einige Codebeispiele:

Die Testadresse wird an das Gateway-Gateway gesendet

Leiten Sie über Routen an die folgende @GetMapping-Adresse weiter und verwenden Sie den folgenden Code, um die Anfrage zu empfangen und zu antworten

Beispiel 1:

Beispiel 2
Beispiel 3
Die vorherige URL-Adresse wird an das Gateway gesendet, gefiltert und mit dem Präfix /mall-order versehen. Damit der Server zu diesem Zeitpunkt Antworten empfangen kann, muss er so eingestellt sein, dass alle gesendeten Anforderungen /mall-order tragen.Auf diese Weise kann der Server normalerweise vom Gateway weitergeleitete Anfragen empfangen.
Beispiel 4
An das aktuelle Gateway gesendete Anfragen werden an die Baidu-Website weitergeleitet
302 ist der Antwortstatuscode nach der Umleitung


Benutzerdefinierte Filter



globaler Filter

Der Unterschied zwischen lokalen Filtern und globalen Filtern:
Teilweise: Teilweise gilt für eine bestimmte Route und muss in der Route konfiguriert werden.
Global: Für alle Routing-Anfragen ist dies nicht erforderlichIn der Konfigurationsdatei konfiguriert, Sobald es definiert ist, wird es verwendet
Integrierte globale Filter:
Wenn lb in der Routing-Adresse enthalten ist, wird die Lastausgleichsrichtlinie automatisch übernommen, entsprechend dem ersten globalen Filter oben.
Diese globalen Filter werden ohne unser Management automatisch beurteilt und verarbeitet.


Benutzerdefinierte globale Filter (wichtige Punkte)

Zeichnen Sie alle Zugriffsanfragen auf und speichern Sie sie in Protokollform. Sie können benutzerdefinierte globale Filter verwenden.

Oder Sie können globale Filter anpassen, um Benutzeranmeldung und -berechtigungen zu bestimmen.

Das Anpassen globaler Filter ist sehr einfach
1. Definieren Sie eine Klasse und überlassen Sie sie zur Verwaltung dem SpringIOC-Container, dh fügen Sie Spring-Annotationen hinzu. @Komponente
2. Erben Sie die GlobalFilter-SchnittstelleUm die darin enthaltene Filtermethode neu zu schreiben, müssen Sie nur den Methodenkörper darin schreiben.
3. ParameteraustauschIn Enthält Geben Sie dieses Gateway einAlle Informationen erbetenNehmen Sie die URL-Adresse, Header, Cookies, Pfadparameter und andere Informationen heraus und führen Sie dann die entsprechenden Schritte aus Geschäftsabwicklung
4. returniere chain.filter(exchange) Geben Sie die Anfrage frei


Protokollierung anfordern

Fügen Sie diesen Befehl hier im Gateway-Microservice hinzu, um die Protokollierung zu aktivieren und alle Anforderungen aufzuzeichnen, die das Gateway passieren. Die Ausgabe erfolgt jedoch nur an die Konsole.



Gateway-übergreifende domänenübergreifende Konfiguration

Domänenübergreifend: Wenn sich die HTTP-Anfrage nicht auf derselben IP + demselben Port befindet, wird sie als domänenübergreifend bezeichnet.

(Nur dieselbe IP + derselbe Port wird als dieselbe Domäne bezeichnet, und beide sind davon überzeugt, dass sie sich in derselben Domäne befinden.)

1. Konfigurieren Sie über yml , konfiguriert auf der nächsten Gateway-Ebene

Der Konfigurationsinhalt kann domänenübergreifend von Ihnen selbst geändert werden
2. Über die Konfigurationsklasse festlegen


Sentinel kombiniert mit Gateway-Gateway

Führen Sie in Kombination mit Sentinel ein Downgrade der Flusskontrolle bei an das Gateway gesendeten Anforderungen durch.

Sentinel ist in zwei Teile gegliedert
Voraussetzung: Laden Sie den Sentinel-Client vom Remote-Server herunter, installieren Sie ihn und führen Sie ihn aus
Der Gateway-Dienst erfordert lediglich:
Die Konfigurationsdatei des Gateway-Dienstes plus IP + Port, Kontopasswort des Sentinel-Clients
Auf diese Weise wird das Downgrade der Flusskontrolle von Sentinel integriert.
Sentinel hat spezielle Regeln für Gateway-Dienste, seine Schnittstelle unterscheidet sich von der Flusskontroll-Downgrade-Schnittstelle für Methoden (Diensteingänge) im Controller.
Sie können den aktuellen Fluss basierend auf diesen Regeln in der Assertion Factory begrenzen.
Der Fluss kann basierend auf einer bestimmten IP, einem Remote-Domänennamen, einem Anforderungsheader, Parametern in der URL und einem Cookie-Wert eingeschränkt werden.


Passen Sie den Antwortinhalt von Sentinel in Kombination mit dem Gateway an

existierenNachdem die Gateway-Schicht durch die Sentinel-Flusskontrolle herabgestuft oder zerstört wurde, antwortet sie dem Anforderer mit dem folgenden Inhalt.

Wenn solche Inhalte nicht unseren Wünschen entsprechen, müssen wir die Art und Weise anpassen, wie auf Ausnahmen reagiert wird.Es gibt zwei Möglichkeiten

Methode 1: (einfach)

 

Schreiben Sie in der YML-Konfiguration den obigen Inhalt in Schichten.

Frühling . Wolke . Wächter . scg . zurückgreifen . Antwort Körper = '{"code":403,"mes":" Derzeitige Begrenzung "}'
Der Inhalt nach dem Antworttext ist unser angepasster Antwortinhalt (im JSON-Format). , der geschriebene Inhalt ist der Inhalt der Antwort
Weg 2:

Legen Sie den Antwortstatuscode, den Antworttyp (im JSON-Format) und den Antwortinhalt („Herabgestuft!“) fest.



Hochverfügbarkeit des Gateways