Condivisione della tecnologia

porta d'ingresso

2024-07-12

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

concetti fondamentali del gateway

1. Itinerario
Il routing è la parte più elementare del gateway. Le informazioni di routing includono un ID, un URI di destinazione, un insieme di factory di asserzioni e un insieme di filtri. Se l'affermazione è vera, l'URL richiesto corrisponde al percorso configurato.
2. Predicati
     La funzione Asser consenteGli sviluppatori definisconoincontronella richiesta HTTPQualsiasi informazione, come intestazioni e parametri della richiesta, ecc.
3. Filtra
Il filtro è suddiviso in Filtro gateway e Filtro globale. Il filtro può elaborare richieste e risposte.


avvio rapido del gateway

1. Introdurre le dipendenze
Nota: entrerà in conflitto con le dipendenze di spring-webmvc, quindi spring-webmvc deve essere escluso.
2. Scrivi il file di configurazione yml
server.porta = 8088 è Porta di accesso al gateway
spring.application.name è Il nome del servizio gateway corrente
Le regole di instradamento sono definite di seguito gateway.routes:
id è il nome di questa regola di instradamento Possono esserci molte regole di instradamento in gateway.routes
url: Accedi al servizio del gateway corrente, A quale URL inoltrare?, Prima di tutto, non posso inoltrare tutte le richieste al gateway. Alcune condizioni devono essere soddisfatte.
predicati: quando La richiesta raggiunge il gateway corrente(COSÌ Questa richiesta deve riportare l'IP + il numero di porta del gateway corrente. informazioni, seguite da una barra /, in modo che il gateway possa impostare automaticamente che queste informazioni siano disponibili,Non è necessario che queste informazioni siano considerate nei predicati), Se l'URL dopo il numero di porta inizia con /order-serv/**,COSÌ Inoltra semplicemente all'ip + porta dell'URL sopra . e barra /Tutti i percorsi successivi non verranno rimossi, quindi viene inoltrato all'indirizzo http://localhost:8020/order-serv/order/add
(order-serv è il nome del servizio per evitare che il servizio ordini abbia un indirizzo che inizia con /order/add e anche il servizio di inventario abbia un indirizzo che inizia con /order/add, quindi Le richieste inviate al gateway portano il nome del servizio da inoltrare.),Ma Non è presente /order-serv/ nella richiesta ricevuta dal servizio ordini., solo la richiesta inviata è http://localhost:8020/order/add, quindi può essere ricevuta. Lascia che il gateway rimuova il percorso del primo livello, filtra i prefissi tramite i filtri
Se l'asserzione non è soddisfatta, verrà segnalato un errore 404.


Qui abbiamo codificato gli indirizzi URL inoltrati nella configurazione. Quando il server viene migrato, l'indirizzo IP cambierà o il server verrà distribuito in un cluster. Il proxy inverso e il bilanciamento del carico dovranno essere eseguiti tramite nginx, il che è molto problematico .

Possiamo risolvere facilmente questi problemi integrando gateway e nacos

Integra Nacos

1. Continuare a introdurre le dipendenze nacos
2. Continua a scrivere il file di configurazione yml
(1) Per integrare nacos, basta registrare il servizio gateway corrente su nacos e scrivere l'indirizzo del servizio nacos e la password dell'account
(2) Modificare l'indirizzo del servizio da inoltrare nelle regole di routing con il nome del servizio "order-service" (url: order-service) e poiché è necessario utilizzare la strategia di bilanciamento del carico del nastro fornito con nacos, quindi aggiungi lb:// davanti, lb significa bilanciamento del carico.
gatewayIl gateway sostituirà l'intero "servizio-ordine" con l'indirizzo IP di uno dei servizi ordine (perché il gateway estrarrà regolarmente l'elenco degli indirizzi IP di vari servizi registrati su nacos)
Ciò risolve il problema che quando il server viene migrato, l'indirizzo IP cambia o il server viene distribuito in un cluster, nginx deve essere utilizzato per il proxy inverso e il bilanciamento del carico.
Regole di routing abbreviate: l'accordo è maggiore della configurazione
(1) Dopo aver attivato la funzione di identificazione automatica dei servizi nacos, non è necessario scrivere regole di asserzione.
(2) Quando una richiesta inviata al gateway inizia con un nome di servizio registrato su nacos, verrà automaticamente inoltrata a un server di quel servizio e il percorso di primo livello verrà automaticamente filtrato (svantaggio: le regole di routing non sono flessibili Abbastanza)
Al momento, purché si acceda in base al formato indirizzo gateway/microservizio/interfaccia, è possibile ottenere una risposta positiva.


fabbrica di asserzioni

Fare asserzioni basate sull'URL è il factory di asserzioni integrato nel gateway.



Factory di asserzioni di routing personalizzato

Si presuppone che si personalizzi una factory di asserzioni in base ai parametri di richiesta Query, si copi il contenuto nel codice sorgente e quindi lo si modifichi secondo necessità.

personalizzare Una factory di asserzioni basata sui parametri di richiesta Query, È necessario ereditare la classe AbstractRoutePredicateFactory e riscrivere la logica del metodo apply. Nel metodo apply, puoi ottenere l'oggetto ServerHttpRequest tramite exchange.getRequest(), in modo da poter ottenere i parametri della richiesta, il metodo della richiesta, l'intestazione della richiesta e altre informazioni.
1. Deve essere un componente primaverile, cioè un fagiolo
2. La classe deve essere aggiunta Fabbrica di predicati di percorso come fine
3. Deve essere ereditato AbstractRoutePredicateFactory
4. È necessario dichiarare una classe interna statica e dichiarare gli attributi per ricevere le informazioni sull'asserzione corrispondente nel file di configurazione.
5. Devono essere combinati scorciatoiaFieldOrder Legamento
6. Utilizzare apply per giudicare logicamente se vero è una corrispondenza riuscita o falso è una corrispondenza non riuscita.


Filtra (prima filtra e poi instrada)

(1) Innanzitutto elaborare l'indirizzo URL richiesto tramite il filtro oppure aggiungere, eliminare e modificare alcune informazioni come intestazioni di richiesta, cookie, ecc.

(2) Quindi instradare al server corrispondente attraverso l'elenco dei servizi nacos

Il ruolo del filtro: quando una richiesta arriva al gateway, possiamo elaborarla con la logica aziendale.

Per esempio:

(1) Far passare il filtro attraverso la parte anterioreRimuovi il primo strato di percorsi

(2) È possibile aggiungere un'intestazione di richiesta a tutte le richieste in arrivo al gateway e quindi impostare il contenuto all'interno.

(3) È possibile impostare un cookie per tutte le richieste che arrivano al gateway, ecc.

Per i dettagli su tutti i filtri integrati, visitare il sito Web ufficiale

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

Ecco alcuni esempi di codice:

L'indirizzo di prova viene inviato al gateway gateway

Indirizza al seguente indirizzo @GetMapping tramite percorsi e il seguente codice per ricevere la richiesta e rispondere

Esempio 1:

Esempio 2
Esempio 3
L'indirizzo URL precedente viene inviato al gateway, filtrato e preceduto da /mall-order. In questo momento, affinché il server possa ricevere una risposta, deve essere impostato in modo che tutte le richieste inviate riportino /mall-order.In questo modo il server può normalmente ricevere le richieste instradate dal gateway.
Esempio 4
Le richieste inviate al gateway corrente verranno indirizzate al sito Web Baidu
302 è il codice di stato della risposta dopo il reindirizzamento


Filtri personalizzati



filtro globale

La differenza tra filtri locali e filtri globali:
Parziale: il parziale è per un determinato percorso e deve essere configurato nel percorso.
Globale: per tutte le richieste di instradamento, non è necessarioConfigurato nel file di configurazione, Una volta definito, viene messo in uso
Filtri globali integrati:
Se lb è incluso nell'indirizzo di instradamento, verrà adottata automaticamente la politica di bilanciamento del carico, corrispondente al primo filtro globale sopra.
Questi filtri globali verranno giudicati ed elaborati automaticamente, senza la nostra gestione.


Filtri globali personalizzati (punti chiave)

Registra tutte le richieste di accesso e salvale nel modulo di registro. Puoi utilizzare filtri globali personalizzati.

Oppure puoi personalizzare i filtri globali per determinare l'accesso e le autorizzazioni dell'utente.

Personalizzare i filtri globali è molto semplice
1. Definire una classe e lasciarla al contenitore springIOC per la gestione, ovvero aggiungere annotazioni spring. @Compenente
2. Eredita l'interfaccia GlobalFilter, per riscrivere il metodo filter all'interno, devi solo scrivere il corpo del metodo all'interno.
3. Scambio di parametriIn Contiene Entra in questo gatewayTutte le informazioni richieste, estrarre l'indirizzo URL, le intestazioni, i cookie, i parametri del percorso e altre informazioni, quindi eseguire la procedura corrispondente elaborazione aziendale
4. restituisci chain.filter(scambio) Rilascia la richiesta


Richiedi la registrazione

Nel microservizio gateway, aggiungi qui questo comando per abilitare la registrazione e registrare tutte le richieste che passano attraverso il gateway, ma verrà inviato solo alla console.



configurazione del gateway tra domini

Interdominio: quando la richiesta http non si trova sullo stesso IP + sulla stessa porta, si chiama interdominio.

(Solo lo stesso IP + la stessa porta vengono chiamati stesso dominio ed entrambi sono soddisfatti di trovarsi nello stesso dominio)

1. Configura tramite yml , configurato al livello successivo del gateway

Il contenuto della configurazione può essere modificato autonomamente tra domini
2. Impostato tramite la classe di configurazione


sentinella combinato con gateway gateway

In combinazione con Sentinel, esegue il downgrade del controllo del flusso sulle richieste inviate al gateway.

la sentinella è divisa in due parti
Prerequisito: scaricare il client sentinel dal server remoto, installarlo ed eseguirlo
Il servizio gateway richiede solo:
Il file di configurazione del servizio gateway più IP + porta, password dell'account del client sentinella
In questo modo viene integrato il downgrade del controllo di flusso di Sentinel.
sentinel prevede regole speciali per i servizi gateway, la sua interfaccia è diversa dall'interfaccia di downgrade del controllo del flusso per i metodi (ingressi di servizio) nel controller.
È possibile limitare il flusso corrente in base a queste regole nella factory di asserzioni.
Il flusso può essere limitato in base a un determinato IP, nome di dominio remoto, intestazione della richiesta, parametri nell'URL e valore del cookie.


Personalizza il contenuto della risposta di sentinel combinato con il gateway

esistereDopo che il livello gateway è stato declassato o danneggiato dal controllo del flusso sentinella, risponderà al richiedente con il seguente contenuto.

Se tali contenuti non sono ciò che desideriamo, dobbiamo personalizzare il modo di rispondere alle eccezioni.Ci sono due modi

Metodo 1: (semplice)

 

Nella configurazione yml, scrivi il contenuto sopra a strati,

primavera . nuvola . sentinella . scg . ricaderci . risposta corpo = '{"codice":403,"mes":" Limite corrente "}'
Il contenuto dopo il corpo della risposta è il nostro contenuto di risposta personalizzato (in formato json) , il contenuto scritto è il contenuto della risposta
Modo 2:

Imposta il codice di stato della risposta, il tipo di risposta (in formato json) e il contenuto della risposta ("Declassato!")



Disponibilità elevata del gateway