Les microservices sont devenus l'architecture technologique dominante poursuivie par les principaux fabricants.La perspective d'apprendre les microservices est très prometteuse et SpringCloud est devenu la pile technologique de microservices dominante. Cette série d'articles se concentrera sur la pile technologique SpringCloud, et analysera et expliquera en détail l'application réelle de la pile technologique SpringCloud dans le scénario de microservice.
Passerelle Spring Cloud
Indice des connaissances
- Présentation de la passerelle
- Commencer
- préfixe de routage
- filtre
1 Présentation de la passerelle
Spring Cloud Gateway
C'est Spring Cloud
un tout nouveau projet de l'équipe, une passerelle basée sur des technologies telles que Spring 5.0
, , SpringBoot2.0
, Project Reactor
etc. Il vise à fournir une REST
méthode simple, efficace et unifiée de gestion du routage des requêtes pour l'architecture des microservices.
Spring Cloud Gateway
En tant SpringCloud
que passerelle dans l'écosystème, l'objectif est de remplacer Netflix Zuul
. Gateway
Il fournit non seulement une méthode de routage unifiée, mais Filter
fournit également les fonctions de base de la passerelle basées sur la méthode de la chaîne. Par exemple : sécurité, surveillance/métriques et limitation.
2 Mise en route
spring_cloud_demos
Créer des sous- gateway_demo
modules dans le projet
2.1 Présentation des dépendances
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2 Classe de démarrage
/**
* Copyright (c) 2022 itmentu.com, All rights reserved.
*
* @Author: yang
*/
@SpringBootApplication
public class GateWayDemoApplication {
public static void main(String[] args) {
SpringApplication.run(GateWayDemoApplication.class, args);
}
}
2.3 Configuration
server:
port: 8502
spring:
application:
name: gateway
cloud:
consul:
host: 192.168.184.128
port: 8500
discovery:
service-name: ${
spring.application.name}
register: false
2.4 Configuration du routage
gateway:
# 路由si(集合)
routes:
# id唯一标识
- id: consumer-service-route
# 路由服务地址
uri: lb://service-consumer
# 断言
predicates:
- Path=/**
Description du code :
1:routes:id表示路由标识,唯一即可,当前案例中表示消费者服务对应的路由
2:uri: lb://service-consumer表示uri使用负载均衡模式,lb表示loadbalance,”lb:“后跟注册中心对应的服务名
2.5 Transformer le service originel en service consommateur
Ajouter @EnableDiscoveryClient
l'enregistrement d'annotation pour ouvrir le centre d'enregistrement
/**
* Copyright (c) 2022 itmentu.com, All rights reserved.
*
* @Author: yang
*/
@SpringBootApplication
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
public class ServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceConsumerApplication.class, args);
}
@Bean
@LoadBalanced//开启负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
Modifier la configuration pour s'inscrire au registre
spring:
cloud:
consul:
discovery:
register: true
2.6 Tests
Accéder à l'interface du service consommateur par http://localhost:8502/consumer/hello-feign
adresse
3 Préfixe de routage
3.1 Ajouter un préfixe
L'ajout de préfixe dans le chemin mappé peut gateway
être réalisé en configurant le filtre de la route dans . PrefixPath
Il peut jouer le rôle de masquer l'adresse de l'interface et éviter l'exposition de l'adresse de l'interface.
Configurez l'adresse de requête pour ajouter un filtre de préfixe de chemin
spring:
gateway:
routes:
filters:
- PrefixPath=/consumer
test
Redémarrer l'accès au service de routage
http://localhost:8502/hello-feign
Le résultat est le suivant, indiquant que la route vers
http://localhost:8002/consumer/hello-feign
3.2 Supprimer le préfixe
En gateway
configurant un filtre de routage dans StripPrefix
, les adresses du chemin mappé peuvent être supprimées. Passez StripPrefix=1
pour spécifier le nombre de préfixes à supprimer de la route. Par exemple : le chemin /api/consumer/hello-feign
sera acheminé vers/consumer/hello-feign
Configurer le filtre de suppression de préfixe de chemin
spring:
gateway:
routes:
filters:
- StripPrefix=1
test
Redémarrer l'accès au service de routage
http://localhost:8502/api/consumer/hello-feign
Le résultat est le suivant, indiquant qu'il est acheminé vers
/consumer/hello-feign
4 filtres
L'une des fonctions importantes d'un filtre en tant que passerelle est d'implémenter l'authentification des requêtes. Les fonctions des chapitres précédents 路由前缀
sont également implémentées à l'aide de filtres.
4.1 Filtres communs
Gateway
Il existe des dizaines de filtres intégrés. Les filtres intégrés courants incluent :
nom du filtre | illustrer |
---|---|
StripPrefix | Supprimer le préfixe du chemin de requête correspondant |
PrefixPath | Préfixez le chemin de requête correspondant |
AjouterRequestHeader | Ajouter un en-tête à la demande correspondante |
AddRequestParameter | Ajouter des paramètres aux requêtes correspondantes |
AddResponseHeader | Ajouter un en-tête à la réponse renvoyée par la passerelle |
4.2 Scénarios courants
- Demande d'authentification : si vous n'avez pas les droits d'accès, interceptez directement
- Gestion des exceptions : enregistrer les journaux d'exceptions
- Statistiques sur la durée des appels de service
4.3 Instructions de configuration du filtre
Gateway
Il y a deux filtres
局部过滤器:只作用在当前配置的路由上,上面我们配置的路由前缀过滤器就是局部过滤器
全局过滤器:作用在所有路由上。
4.4 Démonstration de la configuration globale du filtre
Filtre de configuration globalAddResponseHeader
spring:
cloud:
gateway:
# 配置全局默认过滤器
default-filters:
# 往响应过滤器中加入信息
- AddResponseHeader=key1,value1
test
Les en-têtes de réponse peuvent être vus dans le navigateur