Partage de technologie

Notes pratiques de Grain Mall-27-Composants distribués-SpringCloud-Gateway-Creation

2024-07-12

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

Le contenu principal de cette section est de créer le module de passerelle, d'enregistrer la passerelle auprès de Nacos et de configurer le routage pour les tests.

1. Créez un module de passerelle

Faites un clic droit sur le projetNew->Module, créez un nouveau module, nom du module gulimall-gateway

Insérer la description de l'image ici

Remplissez diverses informations.

Insérer la description de l'image ici

Sélectionnez Dépendance de passerelle.

Insérer la description de l'image ici
Cliquez sur Créer pour créer le module.

2. Configuration du service de passerelle

1. Dépend du module commun

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

Étant donné que le service de passerelle doit également utiliser le centre d'enregistrement et le centre de configuration, il nécessite des dépendances de package associées, qui sont obtenues en s'appuyant sur le module commun.

2. Démarrez la découverte de services

En ajoutant des annotations à la classe de démarrage, le service peut être enregistré dans le centre d'enregistrement après le démarrage.

@EnableDiscoveryClient
  • 1

3. Créer un fichier de configuration

Créez trois nouveaux fichiers de configuration dans le répertoire des ressources.

① application.properties

Configurez les informations relatives au centre d'inscription Nacos.

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

② bootstrap.properties

Configurez les informations pertinentes du centre de configuration Nacos. Notez qu'un espace de noms nommé passerelle doit être créé au préalable sur Nacos. Tous les fichiers de configuration du module passerelle sont stockés dans cet espace de noms.

Insérer la description de l'image ici

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

③ application.yml

Dans ce fichier, écrivez la configuration de routage de la passerelle. Consultez la section suivante pour plus de détails.

3. Configuration du routage de la passerelle

1. Configuration du routage

Dans cette partie, nous prenons deux exigences réelles comme exemples pour pratiquer la configuration de la passerelle.

Le rôle de la passerelle est de transmettre les requêtes reçues aux services correspondants selon les règles configurées par la passerelle.

Pour faciliter la démonstration, en supposant qu'une telle demande existe, lorsque l'URL suivante est saisie dans le navigateur, la demande sera transmise à Baidu.

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

Lorsque l'URL suivante est saisie dans le navigateur, la demande sera transmise à Tencent.

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

Comment écrire un fichier de configuration ?

Passerelle Cloud Warehouse SpringDocumentation officielle, reportez-vous à son format.

Étant donné que nous devons effectuer le transfert correspondant en fonction des conditions de requête sur l'URL, nous trouvons le document de configuration d'assertion de Gateway sur la requête.

Insérer la description de l'image ici

Reportez-vous à ce document pour la configuration.

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

Deux règles de routage sont définies ici pour utiliser les paramètres de requêteurlLa valeur détermine l'URI cible vers lequel la demande doit être transmise.

  • spring.cloud.gateway.routes: Il s'agit de la liste de configuration de routage de Spring Cloud Gateway.

  • chaqueroutesL'élément définit une règle de routage.

  • id: Chaque règle de routage nécessite un identifiant unique pour identifier et gérer les itinéraires.

  • uri : Lorsque la règle de routage correspond, la demande sera transmise à cette adresse URI.icihttps://www.baidu.comethttps://www.qq.comLes URL des sites Web Baidu et Tencent sont précisées respectivement.

  • predicates : Il s'agit de la liste d'assertions de la règle de routage qui est utilisée pour déterminer si cette règle de routage doit être appliquée. Les assertions sont des expressions évaluées en fonction des métadonnées de la requête.

    • Query=url,baidu: Cette assertion indique que si la requête contient unurlparamètre de requête, et sa valeur est égale àbaidu, alors cette règle de routage sera déclenchée et la requête sera transmise àhttps://www.baidu.com

    • Query=url,qq: De même, si le paramètre de requêteurlLa valeur estqq, la demande sera transmise àhttps://www.qq.com

De cette façon, lorsque votre application reçoit un message avecurl=baiduouurl=qqLors de la demande de paramètres de requête, Spring Cloud Gateway transmettra la demande au site Web correspondant conformément aux règles ci-dessus.

2. Vérification

Visitez l'adresse suivante dans votre navigateur.

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

Insérer la description de l'image ici

Si vous disposez de l'interface ci-dessus, cela signifie que la configuration du service de passerelle et la configuration du routage sont normales.

journal des erreurs

Une erreur sera signalée lors du démarrage de 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

Insérer la description de l'image ici

La raison en est que le module Gateway dépend de common et que le module common déclare sa dépendance à mybatis. Le package mybatis recherchera les configurations liées à la base de données au démarrage, et le projet Gateway ne nécessite pas de base de données, il n'y a donc pas de configuration pertinente. .

La solution consiste à indiquer au module de passerelle qu'il n'est pas nécessaire de rechercher les configurations liées à la base de données au démarrage et que vous pouvez exclure les dépendances de package pertinentes en les déclarant dans l'annotation de classe de démarrage.

Insérer la description de l'image ici

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 1