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.
Faites un clic droit sur le projetNew->Module
, créez un nouveau module, nom du module gulimall-gateway
。
Remplissez diverses informations.
Sélectionnez Dépendance de passerelle.
Cliquez sur Créer pour créer le module.
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
É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.
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
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
② 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.
spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=405d2201-d62b-4203-80c8-800e9387ad40
③ application.yml
Dans ce fichier, écrivez la configuration de routage de la passerelle. Consultez la section suivante pour plus de détails.
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
Lorsque l'URL suivante est saisie dans le navigateur, la demande sera transmise à Tencent.
http://localhost/?url=qq
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.
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
Deux règles de routage sont définies ici pour utiliser les paramètres de requêteurl
La 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.
chaqueroutes
L'é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.com
ethttps://www.qq.com
Les 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 unurl
paramè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êteurl
La valeur estqq
, la demande sera transmise àhttps://www.qq.com
。
De cette façon, lorsque votre application reçoit un message avecurl=baidu
ouurl=qq
Lors 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.
Visitez l'adresse suivante dans votre navigateur.
http://localhost/?url=baidu
Si vous disposez de l'interface ci-dessus, cela signifie que la configuration du service de passerelle et la configuration du routage sont normales.
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
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.
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)