Technologieaustausch

Grain Mall Praktische Hinweise-27-Verteilte Komponenten-SpringCloud-Gateway-Erstellung

2024-07-12

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

Der Hauptinhalt dieses Abschnitts besteht darin, das Gateway-Modul zu erstellen, das Gateway bei Nacos zu registrieren und das Routing zum Testen zu konfigurieren.

1. Erstellen Sie ein Gateway-Modul

Klicken Sie mit der rechten Maustaste auf das ProjektNew->Module, Erstellen Sie ein neues Modul, Modulname gulimall-gateway

Fügen Sie hier eine Bildbeschreibung ein

Geben Sie verschiedene Informationen ein.

Fügen Sie hier eine Bildbeschreibung ein

Wählen Sie Gateway-Abhängigkeit aus.

Fügen Sie hier eine Bildbeschreibung ein
Klicken Sie auf Erstellen, um das Modul zu erstellen.

2. Konfiguration des Gateway-Dienstes

1. Abhängig vom gemeinsamen Modul

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

Da der Gateway-Dienst auch das Registrierungscenter und das Konfigurationscenter verwenden muss, sind entsprechende Paketabhängigkeiten erforderlich, die durch die Verwendung gemeinsamer Module abgerufen werden.

2. Starten Sie die Diensterkennung

Durch Hinzufügen von Anmerkungen zur Startklasse kann der Dienst nach dem Start im Registrierungscenter registriert werden.

@EnableDiscoveryClient
  • 1

3. Konfigurationsdatei erstellen

Erstellen Sie drei neue Konfigurationsdateien im Ressourcenverzeichnis.

① Anwendung.Eigenschaften

Konfigurieren Sie die Informationen zum Nacos-Registrierungscenter.

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

② Bootstrap.Eigenschaften

Konfigurieren Sie die relevanten Informationen des Nacos-Konfigurationscenters. Beachten Sie, dass im Voraus ein Namespace mit dem Namen „Gateway“ erstellt werden muss. Alle Konfigurationsdateien des Gateway-Moduls werden in diesem Namespace gespeichert.

Fügen Sie hier eine Bildbeschreibung ein

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

③ anwendung.yml

Schreiben Sie in diese Datei die Gateway-Routing-Konfiguration. Weitere Informationen finden Sie im nächsten Abschnitt.

3. Gateway-Routing-Konfiguration

1. Routing-Konfiguration

In diesem Teil nehmen wir zwei tatsächliche Anforderungen als Beispiele, um die Konfiguration des Gateways zu üben.

Die Aufgabe des Gateways besteht darin, die empfangenen Anfragen gemäß den vom Gateway konfigurierten Regeln an die entsprechenden Dienste weiterzuleiten.

Zur Vereinfachung der Demonstration wird unter der Annahme, dass eine solche Anforderung besteht, die Anforderung an Baidu weitergeleitet, wenn die folgende URL in den Browser eingegeben wird.

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

Bei Eingabe der folgenden URL im Browser wird die Anfrage an Tencent weitergeleitet.

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

Wie schreibe ich eine Konfigurationsdatei?

Repository Spring Cloud GatewayOffizielle Dokumentation, siehe dessen Format.

Da wir eine entsprechende Weiterleitung basierend auf den Abfragebedingungen für die URL durchführen müssen, finden wir das Assertionskonfigurationsdokument des Gateways zu Abfrage.

Fügen Sie hier eine Bildbeschreibung ein

Informationen zur Konfiguration finden Sie in diesem Dokument.

anwendung.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

Hier werden zwei Routing-Regeln zur Verwendung von Abfrageparametern definierturlDer Wert bestimmt den Ziel-URI, an den die Anfrage weitergeleitet werden soll.

  • spring.cloud.gateway.routes: Dies ist die Routing-Konfigurationsliste von Spring Cloud Gateway.

  • jederoutesDas Element definiert eine Routing-Regel.

  • id: Jede Routing-Regel erfordert eine eindeutige ID zum Identifizieren und Verwalten von Routen.

  • uri : Wenn die Routing-Regel übereinstimmt, wird die Anfrage an diese URI-Adresse weitergeleitet.Hierhttps://www.baidu.comUndhttps://www.qq.comDie URLs der Websites von Baidu und Tencent werden jeweils angegeben.

  • predicates : Dies ist die Assertionsliste der Routing-Regel, die verwendet wird, um zu bestimmen, ob diese Routing-Regel angewendet werden soll. Behauptungen sind Ausdrücke, die basierend auf den Metadaten der Anfrage ausgewertet werden.

    • Query=url,baidu: Diese Behauptung gibt an, dass, wenn die Anfrage a enthälturlAbfrageparameter und sein Wert ist gleichbaidu, dann wird diese Routing-Regel ausgelöst und die Anfrage wird weitergeleitethttps://www.baidu.com

    • Query=url,qq: Ebenso, wenn der AbfrageparameterurlDer Wert istqq, die Anfrage wird weitergeleitet anhttps://www.qq.com

Auf diese Weise erhält Ihre Anwendung eine Nachricht miturl=baiduoderurl=qqBeim Anfordern von Abfrageparametern leitet Spring Cloud Gateway die Anforderung gemäß den oben genannten Regeln an die entsprechende Website weiter.

2. Überprüfung

Rufen Sie die folgende Adresse in Ihrem Browser auf.

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

Fügen Sie hier eine Bildbeschreibung ein

Wenn Sie über die obige Schnittstelle verfügen, bedeutet dies, dass die Gateway-Service-Konfiguration und die Routing-Konfiguration normal sind.

Fehlerprotokoll

Beim Start von Gateway wird ein Fehler gemeldet.

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

Fügen Sie hier eine Bildbeschreibung ein

Der Grund dafür ist, dass das Gateway-Modul von Common abhängt und das Common-Modul seine Abhängigkeit von Mybatis angibt. Das Mybatis-Paket sucht beim Start nach datenbankbezogenen Konfigurationen und das Gateway-Projekt erfordert keine Datenbank, sodass keine relevante Konfiguration vorhanden ist .

Die Lösung besteht darin, dem Gateway-Modul mitzuteilen, dass beim Start keine Suche nach datenbankbezogenen Konfigurationen erforderlich ist und dass Sie relevante Paketabhängigkeiten ausschließen können, indem Sie die Annotation der Startup-Klasse deklarieren.

Fügen Sie hier eine Bildbeschreibung ein

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 1