Passerelle de passerelle intégrée SpringCloud

1. Passerelle de services

La raison de l'émergence de la passerelle API est l'émergence de l'architecture de microservice. Différents microservices ont généralement des adresses réseau différentes, et les clients externes peuvent avoir besoin d'appeler les interfaces de plusieurs services pour répondre à une exigence commerciale. Si le client communique directement avec chaque service de microservice communication, il y aura les problèmes suivants :

(1) Le client demandera plusieurs fois différents microservices, ce qui augmente la complexité du client.
(2) Il existe des demandes inter-domaines, qui sont relativement compliquées à gérer dans certains scénarios.
(3) L'authentification est complexe et chaque service nécessite une authentification indépendante.
(4) Difficile à refactoriser, avec l'itération du projet, les microservices peuvent devoir être redivisés. Par exemple, plusieurs services peuvent être combinés en un seul ou un service peut être divisé en plusieurs. Si le client communique directement avec le microservice, le refactoring sera difficile à mettre en place.
(5) Certains microservices peuvent utiliser des protocoles de pare-feu/navigateur peu conviviaux, et l'accès direct sera difficile.

Ces problèmes peuvent être résolus à l'aide d'API Gateway. La passerelle API est la couche intermédiaire entre le client et le serveur, et toutes les demandes externes passeront d'abord par la passerelle API. C'est-à-dire que la mise en œuvre de l'API prend davantage en compte la logique métier, tandis que la sécurité, les performances et la surveillance peuvent être assurées par des passerelles API, ce qui non seulement améliore la flexibilité de l'entreprise, mais ne manque pas non plus de sécurité.

En un sens, il peut remplacer la fonction de demande de distribution de port proxy de nginx. Et en même temps, la configuration dans la passerelle de service peut également résoudre le problème des requêtes inter-domaines entre le front-end et le back-end.

2. Passerelle Cloud Spring

Spring Cloud Gateway est une passerelle officielle développée par Spring basée sur des technologies telles que Spring 5.0, Spring Boot2.0 et Project Reactor. Spring Cloud Gateway vise à fournir une méthode de gestion de routage d'API simple, efficace et unifiée pour l'architecture de microservices. Spring Cloud Gateway est utilisé comme Spring Cloud La passerelle dans l'écosystème vise à remplacer Netflix Zuul, qui fournit non seulement une méthode de routage unifiée, mais fournit également des fonctions de base de la passerelle basées sur la chaîne Filer, telles que : sécurité, surveillance/achat, limitation de courant, etc.

3. Construction de services

3.1 Construire une passerelle serveur

Créer un nouveau module dans le projet

3.2 Modifier la configuration pom.xml

Modifier pom.xml

<dependencies>
    <dependency>
        <groupId>com.atguigu.yygh</groupId>
        <artifactId>common-util</artifactId>
        <version>1.0</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>

    <!-- 服务注册 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

3.3 Ajouter un fichier de configuration sous les ressources

1, application.propriétés

# 服务端口
server.port=80
# 服务名
spring.application.name=service-gateway

# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true

#设置路由id
spring.cloud.gateway.routes[0].id=service-hosp
#设置路由的uri
spring.cloud.gateway.routes[0].uri=lb://service-hosp
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= Path=/*/hosp/**

#设置路由id
spring.cloud.gateway.routes[1].id=service-cmn
#设置路由的uri
spring.cloud.gateway.routes[1].uri=lb://service-cmn
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[1].predicates= Path=/*/cmn/**

3.4 Ajouter une classe de démarrage

package com.atguigu.yygh;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ServerGatewayApplication {
    
    

public static void main(String[] args) {
    
    
      SpringApplication.run(ServerGatewayApplication.class, args);
   }
}

3.5 Traitement inter-domaines

Cross-origin : restrictions du navigateur sur la politique de même origine de JavaScript.
Les situations suivantes sont inter-domaines :
Exemples de raisons inter-domaines

Différents noms de domaine www.jd.com
et www.taobao.com le même nom de domaine, un port différent C'est le même que le port, mais le chemin de la requête est différent et n'appartient pas à un domaine croisé, tel que : www.jd .com/item www.jd.com/goods http et https appartiennent également au domaine croisé de localhost:1000 à localhost:8888, qui appartient à Les ports sont différents, domaine croisé.





3.5.1 Pourquoi y a-t-il des problèmes inter-domaines ?

L'interdomaine n'a pas nécessairement de problèmes interdomaines.
Parce que le problème inter-domaines est une restriction de sécurité des navigateurs pour les requêtes Ajax : les requêtes Ajax initiées par une page ne peuvent être que dans le même chemin que le nom de domaine de la page en cours, ce qui peut empêcher efficacement les attaques inter-sites.
Donc : le problème de domaine croisé est une sorte de limitation pour ajax .
Mais cela apporte des inconvénients à notre développement, et dans l'environnement de production réel, il y aura certainement de nombreuses interactions entre les serveurs, et les adresses et les ports peuvent être différents. Que devons-nous faire ?

3.5.2 Résolution de problèmes inter-domaines

La classe de configuration globale implémente
la classe CorsConfig

@Configuration
public class CorsConfig {
    
    
    @Bean
    public CorsWebFilter corsFilter() {
    
    
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

3.6 Ajustement d'entretien

À l'heure actuelle, nous avons effectué un traitement inter-domaines sur la passerelle, de sorte que le service de service n'a pas besoin d'effectuer de traitement inter-domaines. Supprimez la balise @CrossOrigin ajoutée à la classe de contrôleur avant d'éviter les exceptions de programme.

Je suppose que tu aimes

Origine blog.csdn.net/david2000999/article/details/122490865
conseillé
Classement