Condivisione della tecnologia

Grain Mall Note pratiche-27-Componenti distribuiti-SpringCloud-Gateway-Creazione

2024-07-12

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

Il contenuto principale di questa sezione è creare il modulo gateway, registrare il gateway su Nacos e configurare il routing per il test.

1. Creare un modulo gateway

Fare clic con il tasto destro sul progettoNew->Module, crea un nuovo modulo, nome del modulo gulimall-gateway

Inserisci qui la descrizione dell'immagine

Compila varie informazioni.

Inserisci qui la descrizione dell'immagine

Seleziona Dipendenza gateway.

Inserisci qui la descrizione dell'immagine
Fare clic su Crea per creare il modulo.

2. Configurazione del servizio gateway

1. Dipende dal modulo comune

		<dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

Poiché il servizio gateway deve utilizzare anche il centro di registrazione e il centro di configurazione, richiede le dipendenze dei pacchetti correlati, che si ottengono facendo affidamento sul modulo comune.

2. Avviare il rilevamento dei servizi

Aggiungendo annotazioni alla classe di avvio, il servizio può essere registrato nel centro di registrazione dopo l'avvio.

@EnableDiscoveryClient
  • 1

3. Creare il file di configurazione

Crea tre nuovi file di configurazione nella directory delle risorse.

① proprietà dell'applicazione

Configurare le informazioni relative al centro di registrazione Nacos.

server.port=80
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.application.name=gulimall-gateway
  • 1
  • 2
  • 3

② proprietà bootstrap

Configurare le informazioni rilevanti del centro di configurazione Nacos. Si noti che uno spazio dei nomi denominato gateway deve essere creato in anticipo su Nacos. Tutti i file di configurazione del modulo gateway vengono archiviati in questo spazio dei nomi.

Inserisci qui la descrizione dell'immagine

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=405d2201-d62b-4203-80c8-800e9387ad40
  • 1
  • 2
  • 3

③ applicazione.yml

In questo file, scrivere la configurazione del routing del gateway. Per i dettagli vedere la sezione successiva.

3. Configurazione del routing del gateway

1. Configurazione del percorso

In questa parte, prendiamo due requisiti reali come esempi per esercitarci su come configurare il gateway.

Il ruolo del gateway è inoltrare le richieste ricevute ai servizi corrispondenti secondo le regole configurate dal gateway.

Per comodità di dimostrazione, supponendo che esista una tale richiesta, quando viene inserito il seguente URL nel browser, la richiesta verrà inoltrata a Baidu.

http://localhost/?url=baidu
  • 1

Quando il seguente URL viene inserito nel browser, la richiesta verrà inoltrata a Tencent.

http://localhost/?url=qq
  • 1

Come scrivere un file di configurazione?

Magazzino Spring Cloud GatewayDocumentazione ufficiale, fare riferimento al suo formato.

Poiché dobbiamo eseguire l'inoltro corrispondente in base alle condizioni della query sull'URL, troviamo il documento di configurazione dell'asserzione del Gateway su Query.

Inserisci qui la descrizione dell'immagine

Fare riferimento a questo documento per la configurazione.

applicazione.yml

spring:
  cloud:
    gateway:
      routes:
        - id: baidu_test
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_test
          uri: https://www.qq.com
          predicates:
            - Query=url,qq
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Qui vengono definite due regole di routing per utilizzare i parametri di queryurlIl valore determina l'URI di destinazione a cui deve essere inoltrata la richiesta.

  • spring.cloud.gateway.routes: questo è l'elenco di configurazione del routing di Spring Cloud Gateway.

  • ogniroutesL'elemento definisce una regola di routing.

  • id: ciascuna regola di routing richiede un ID univoco per identificare e gestire i percorsi.

  • uri : quando la regola di routing corrisponde, la richiesta verrà inoltrata a questo indirizzo URI.Quihttps://www.baidu.comEhttps://www.qq.comVengono specificati rispettivamente gli URL dei siti Web Baidu e Tencent.

  • predicates : questo è l'elenco di asserzioni della regola di routing utilizzato per determinare se questa regola di routing deve essere applicata. Le asserzioni sono espressioni che vengono valutate in base ai metadati della richiesta.

    • Query=url,baidu: Questa affermazione indica che se la richiesta contiene aurlparametro di query e il suo valore è uguale abaidu, questa regola di routing verrà attivata e la richiesta verrà inoltrata ahttps://www.baidu.com

    • Query=url,qq: Allo stesso modo, se il parametro queryurlIl valore èqq, la richiesta verrà inoltrata ahttps://www.qq.com

In questo modo, quando la tua applicazione riceve un messaggio conurl=baiduOurl=qqQuando si richiedono parametri di query, Spring Cloud Gateway invierà la richiesta al sito Web corrispondente in base alle regole di cui sopra.

2. Verifica

Visita il seguente indirizzo nel tuo browser.

http://localhost/?url=baidu
  • 1

Inserisci qui la descrizione dell'immagine

Se si dispone dell'interfaccia sopra riportata, significa che la configurazione del servizio gateway e la configurazione del routing sono normali.

registro degli errori

Verrà segnalato un errore durante l'avvio del Gateway.

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-07-11 15:57:32.988 ERROR 27224 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Inserisci qui la descrizione dell'immagine

Il motivo è che il modulo Gateway dipende da common e il modulo common dichiara la sua dipendenza da mybatis. Il pacchetto mybatis cercherà le configurazioni relative al database all'avvio e il progetto Gateway non richiede un database, quindi non esiste una configurazione rilevante. .

La soluzione è dire al modulo gateway che non è necessario cercare configurazioni relative al database all'avvio e che è possibile escludere le dipendenze del pacchetto rilevanti dichiarando l'annotazione della classe di avvio.

Inserisci qui la descrizione dell'immagine

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 1