Partage de technologie

passerelle

2024-07-12

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

concepts fondamentaux de la passerelle

1. Itinéraire
Le routage est la partie la plus élémentaire de la passerelle. Les informations de routage comprennent un identifiant, un URI de destination, un ensemble de fabriques d'assertions et un ensemble de filtres. Si l'affirmation est vraie, l'URL demandée correspond à la route configurée.
2. Prédicats
     La fonction d'assertion permetLes développeurs définissentcorrespondredans la requête HttpToute information, telle que les en-têtes et paramètres de demande, etc.
3. Filtrer
Le filtre est divisé en filtre de passerelle et filtre global. Le filtre peut traiter les demandes et les réponses.


passerelledémarrage rapide

1. Introduire des dépendances
Remarque : cela entrera en conflit avec les dépendances de spring-webmvc, donc spring-webmvc doit être exclu.
2. Écrivez le fichier de configuration yml
serveur.port = 8088 est Port d'accès à la passerelle
spring.application.name est Le nom du service de passerelle actuel
Les règles de routage sont définies sous gateway.routes :
id est le nom de cette règle de routage. Il peut y avoir de nombreuses règles de routage sous gateway.routes.
URL: Accéder au service de la passerelle actuelle, Vers quelle URL transférer ?, Tout d'abord, je ne peux pas transmettre toutes les requêtes à la passerelle. Certaines conditions doivent être remplies. Les assertions de prédicats jouent ce rôle.
prédicats : quand La requête atteint la passerelle actuelle(Donc Cette requête doit porter l'IP + le numéro de port de la passerelle actuelle. informations, suivies d'une barre oblique /, afin que la passerelle puisse par défaut que ces informations soient disponibles,Cette information n'a pas besoin d'être prise en compte dans les prédicats), Si l'URL après le numéro de port commence par /order-serv/**,Donc Transférez simplement vers le port IP + de l'URL ci-dessus . et barre oblique /Tous les chemins suivants ne seront pas supprimés, puis il est transmis à l'adresse http://localhost:8020/order-serv/order/add
(order-serv est le nom du service pour empêcher le service de commande d'avoir une adresse commençant par /order/add, et le service d'inventaire d'avoir également une adresse commençant par /order/add, donc Les requêtes envoyées à la passerelle portent le nom du service à transmettre.),mais Il n’y a pas de /order-serv/ dans la requête reçue par le service de commande., seule la requête envoyée est http://localhost:8020/order/add, elle peut donc être reçue. Laissez la passerelle supprimer le chemin de la première couche, filtrer les préfixes à travers des filtres
Si l'assertion n'est pas satisfaite, une erreur 404 sera signalée.


Ici, nous avons codé en dur les adresses URL transférées dans la configuration. Lorsque le serveur est migré, l'adresse IP change ou le serveur est déployé dans un cluster. Le proxy inverse et l'équilibrage de charge doivent être effectués via nginx, ce qui est très gênant. .

Nous pouvons facilement résoudre ces problèmes en intégrant gateway et nacos

Intégrer Nacos

1. Continuer à introduire les dépendances nacos
2. Continuez à écrire le fichier de configuration yml
(1) Pour intégrer nacos, enregistrez simplement le service de passerelle actuel sur nacos et écrivez l'adresse du service nacos et le mot de passe du compte.
(2) Remplacez l'adresse du service à transférer dans les règles de routage par le nom du service "order-service" (url : order-service), et parce que vous devez utiliser la stratégie d'équilibrage de charge du ruban fourni avec nacos, donc ajoutez lb:// devant, lb signifie équilibrage de charge.
passerelleLa passerelle remplacera l'intégralité du "service de commande" par l'adresse IP de l'un des services de commande (car la passerelle extraira régulièrement la liste d'adresses IP des différents services enregistrés sur nacos)
Cela résout le problème selon lequel lorsque le serveur est migré, l'adresse IP change ou le serveur est déployé dans un cluster, nginx doit être utilisé pour le proxy inverse et l'équilibrage de charge.
Règles de routage abrégées : l'accord est supérieur à la configuration
(1) Après avoir activé la fonction d'identification automatique des services nacos, il n'est pas nécessaire d'écrire des règles d'assertion.
(2) Lorsqu'une requête envoyée à la passerelle commence par un nom de service enregistré sur nacos, elle sera automatiquement transmise à un serveur de ce service et le chemin de première couche sera automatiquement filtré (inconvénient : les règles de routage ne sont pas flexibles). assez)
À l'heure actuelle, tant que vous y accédez selon le format adresse de passerelle/microservice/interface, vous pouvez obtenir une réponse réussie.


usine d'assertions

Faire des assertions basées sur une URL est la fabrique d'assertions intégrée de la passerelle.



Fabrique d'assertions de routage personnalisé

On suppose ici que vous personnalisez une fabrique d'assertions en fonction des paramètres de requête de requête, que vous copiez le contenu dans le code source, puis que vous le modifiez si nécessaire.

Personnaliser Une fabrique d'assertions basée sur les paramètres de requête Query, Vous devez hériter de la classe AbstractRoutePredicateFactory et réécrire la logique de la méthode apply. Dans la méthode d'application, vous pouvez obtenir l'objet ServerHttpRequest via Exchange.getRequest(), afin d'obtenir les paramètres de demande, la méthode de demande, l'en-tête de demande et d'autres informations.
1. Il doit s'agir d'un composant à ressort, c'est-à-dire d'un haricot
2. La classe doit être ajoutée RoutePredicateFactory comme une fin
3. Doit être hérité RésuméRoutePredicateFactory
4. Vous devez déclarer une classe interne statique et déclarer des attributs pour recevoir les informations d'assertion correspondantes dans le fichier de configuration.
5. Doit être combiné raccourciFieldOrder Lier
6. Utilisez apply pour juger logiquement si true est une correspondance réussie ou false est une correspondance échouée.


Filtrer (filtrer d'abord puis acheminer)

(1) Traitez d'abord l'adresse URL demandée via le filtre, ou ajoutez, supprimez et modifiez certaines informations telles que les en-têtes de demande, les cookies, etc.

(2) Ensuite, dirigez-vous vers le serveur correspondant via la liste de services nacos

Le rôle du filtre : Lorsqu'une requête arrive à la passerelle, nous pouvons traiter la requête avec une logique métier.

Par exemple:

(1) Passer le filtre par l'avantSupprimer la première couche de chemins

(2) Vous pouvez ajouter un en-tête de requête à toutes les requêtes arrivant à la passerelle, puis définir le contenu à l'intérieur.

(3) Vous pouvez définir un cookie pour toutes les demandes arrivant à la passerelle, etc.

Pour plus de détails sur tous les filtres intégrés, veuillez visiter le site officiel

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

Voici quelques exemples de code :

L'adresse de test est envoyée à la passerelle passerelle

Acheminez vers l'adresse @GetMapping suivante via des itinéraires et le code suivant pour recevoir la demande et répondre

Exemple 1:

Exemple 2
Exemple 3
L'adresse URL précédente est envoyée à la passerelle, filtrée et préfixée par /mall-order. À ce stade, pour que le serveur puisse recevoir des réponses, il doit être configuré de manière à ce que toutes les demandes envoyées portent /mall-order.De cette manière, le serveur peut normalement recevoir les requêtes acheminées par la passerelle.
Exemple 4
Les demandes envoyées à la passerelle actuelle seront acheminées vers le site Web de Baidu
302 est le code d'état de la réponse après la redirection


Filtres personnalisés



filtre global

La différence entre les filtres locaux et les filtres globaux :
Partiel : Partial est destiné à un certain itinéraire et doit être configuré dans l'itinéraire.
Global : pour toutes les demandes de routage, pas besoin deConfiguré dans le fichier de configuration, Une fois défini, il est mis en service
Filtres globaux intégrés :
Si lb est inclus dans l'adresse de routage, la politique d'équilibrage de charge sera automatiquement adoptée, correspondant au premier filtre global ci-dessus.
Ces filtres globaux seront automatiquement jugés et traités automatiquement, sans notre gestion.


Filtres globaux personnalisés (points clés)

Enregistrez toutes les demandes d'accès et enregistrez-les sous forme de journal. Vous pouvez utiliser des filtres globaux personnalisés.

Vous pouvez également personnaliser les filtres globaux pour déterminer la connexion et les autorisations des utilisateurs.

La personnalisation des filtres globaux est très simple
1. Définissez une classe et laissez-la gérer au conteneur springIOC, c'est-à-dire ajoutez des annotations Spring. @Compenent
2. Hériter de l'interface GlobalFilter, pour réécrire la méthode de filtrage à l'intérieur, il vous suffit d'écrire le corps de la méthode à l'intérieur.
3. Échange de paramètresdans Contient Entrez dans cette passerelleToutes les informations demandées, supprimez l'adresse URL, les en-têtes, les cookies, les paramètres de chemin et d'autres informations, puis effectuez la procédure correspondante traitement des affaires
4. chaîne de retour.filtre (échange) Libérer la demande


Journalisation des demandes

Dans le microservice de passerelle, ajoutez cette commande ici pour activer la journalisation et enregistrer toutes les requêtes transitant par la passerelle, mais elle ne sera affichée que sur la console.



configuration inter-domaines de la passerelle

Cross-domain : Lorsque la requête http n'est pas sur la même IP + le même port, on parle de cross-domain.

(Seules la même IP + le même port sont appelés le même domaine, et les deux se contentent d'être dans le même domaine)

1. Configurer via yml , configuré au niveau suivant de la passerelle

Le contenu de la configuration peut être modifié vous-même sur plusieurs domaines
2. Définir via la classe de configuration


sentinelle combinée avec passerelle passerelle

En combinaison avec Sentinel, effectuez une rétrogradation du contrôle de flux sur les requêtes envoyées à la passerelle.

la sentinelle est divisée en deux parties
Prérequis : télécharger le client sentinelle depuis le serveur distant, l'installer et l'exécuter
Le service de passerelle nécessite uniquement :
Le fichier de configuration du service passerelle plus le port IP +, mot de passe du compte du client sentinelle
De cette manière, la rétrogradation du contrôle de flux de Sentinel est intégrée.
Sentinel a des règles spéciales pour les services de passerelle, son interface est différente de l'interface de rétrogradation du contrôle de flux pour les méthodes (entrées de service) dans le contrôleur.
Vous pouvez limiter le flux actuel en fonction de ces règles dans la fabrique d'assertions.
Le flux peut être limité en fonction d'une certaine adresse IP, d'un nom de domaine distant, d'un en-tête de requête, des paramètres de l'URL et de la valeur du cookie.


Personnaliser le contenu de la réponse de Sentinel combiné à la passerelle

existerUne fois que la couche passerelle est déclassée ou grillée par le contrôle de flux sentinelle, elle répondra avec le contenu suivant au demandeur.

Si un tel contenu ne correspond pas à ce que nous souhaitons, nous devons personnaliser la manière de répondre aux exceptions.Il y a deux manières

Méthode 1 : (simple)

 

Dans la configuration yml, écrivez le contenu ci-dessus en couches,

printemps . nuage . sentinelle . SCG . retomber . réponse corps = '{"code":403,"mes":" Limite actuelle "}'
Le contenu après le corps de la réponse est notre contenu de réponse personnalisé (au format json) , le contenu écrit est le contenu de la réponse
Voie 2 :

Définissez le code d'état de la réponse, le type de réponse (au format JSON) et le contenu de la réponse (« Déclassé ! »)



Haute disponibilité de la passerelle