Spring Cloud Gateway(基础概念+路由)

目录

1.什么是Spring Cloud Gateway

2、Gateway三大核心概念

2.1 Route(路由)

2.1.1 静态路由

2.1.2 动态路由


1.什么是Spring Cloud Gateway

        Spring Cloud Gateway是一个基于Spring Framework 5,Spring Boot 2和Project Reactor的反应式API网关,用于构建微服务架构中的边缘服务。它提供了一种简单而强大的方式来路由请求,并对请求进行过滤和转换,以满足不同微服务之间的通信需求。

Spring Cloud Gateway的主要功能包括:

  1. 路由:根据请求的URI和其他条件将请求路由到相应的微服务实例。
  2. 过滤器:在请求被路由之前或之后对请求进行过滤和修改,例如添加请求头、验证身份等。
  3. 负载均衡:自动将请求分发到多个微服务实例,以提高系统的可伸缩性和容错性。
  4. 断路器:在微服务不可用或出现故障时,阻止请求继续发送,并提供降级功能。
  5. 动态路由:根据运行时的配置动态地添加、修改和删除路由规则。
  6. 集成服务发现:与服务注册中心(如Eureka、Consul)集成,自动发现可用的微服务实例。

Spring Cloud Gateway的优点:

        高性能、低延迟、易于扩展和集成、简化的配置和灵活的路由规则等。它提供了一种强大而灵活的方式来管理和控制微服务之间的通信,使开发人员能够更好地构建和维护分布式系统。

2、Gateway三大核心概念

Gateway的核心逻辑也就是路由转发+执行过滤器链。

2.1 Route(路由)

        讲网关路由前,先了解一下网关路由使用的场景,以及与Nginx路由的使用场景区别:

Nginx和API Gateway在路由方面应用的不同场景和级别。

  1. Nginx 路由:
    • Nginx通常被用作反向代理服务器和负载均衡器,它的路由功能更倾向于处理基础的HTTP请求和转发流量。
    • 在云服务器厂商级别,Nginx可以用于将流量分发到不同的服务器、缓存静态资源,以及提供一些基本的安全性配置。
  2. API Gateway 路由:
    • API Gateway更专注于处理API请求,它提供了更高级别的路由和管理功能,包括请求转发、认证、授权、限流、监控等。
    • 在项目开发级别,API Gateway可以用于管理和发布API,提供更灵活的API路由和控制。

在实际应用中,我们通常会将Nginx和API Gateway结合使用,以发挥它们各自的优势。Nginx负责处理基础的HTTP请求和流量分发,而API Gateway则负责处理API相关的高级功能,确保API的安全性、可用性和可扩展性。这样的架构能够更好地满足项目的需求。

        如果我们在了解过Nginx的情况下,理解起上面的描述就比较易懂了,Spring Cloud中的网关路由是开发项目级别使用的,Nginx中的路由是阿里云、腾讯云等云服务器级别使用的,两者搭配,very good!

2.1.1 静态路由

        在使用gatweway网关的时候一般都会用到spring-cloud-starter-gateway、spring-cloud-starter-alibaba-nacos-discovery、spring-cloud-starter-alibaba-nacos-config这三个依赖,我们需要先进行导入一下。

    <dependencies>
        <!-- SpringCloud Gateway -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!-- SpringCloud Alibaba Nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- SpringCloud Alibaba Nacos Config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

        (1). 根据代码实现的路由(根据RouteLocatar类进行路由),我们在代码中注入RouteLocator的Bean 实现路由,通过代码实现路由转发。

图中我们实现了两种方式的路由,一种是配置文件配置路由,另一种是根据RouteLocatar类进行路由。

网关的配置文件详解:

在Spring Cloud Gateway中,cloud.gateway.routes 下的配置项用于定义网关的路由信息。其中,-id、uri、predicates 是其中重要的配置项。

  • id
    • 作用:用于为每个路由定义一个唯一的标识符。这个标识符在整个网关配置中应该是唯一的。
    • 在以下配置文件中,ruoyi-gateway就是路由的唯一标识符。
  • uri
    • 作用:指定路由的目标URI。请求将被转发到这个URI。可以是一个具体的URL,也可以是一个服务的名称,由服务注册中心提供服务的实例将会接收请求。
    • 在以下配置文件中,请求会被转发到 http://localhost:8080
  • predicates
    • 作用:定义路由的匹配条件,当请求满足这些条件时,路由将被触发。可以根据请求的路径、方法、头部等进行条件匹配。
    • 在以下配置文件中,Path=/hello/** 是一个路径匹配条件,表示只有路径匹配 /hello/** 的请求才会触发这个路由。

 

        通过组合使用这些配置项,我们还可以定义多个路由规则,每个规则可以根据请求的不同属性匹配,并将请求转发到相应的目标URI。这使得Spring Cloud Gateway能够实现灵活的路由管理和请求转发。 

         (2). 在配置完上面的路由信息后,就可以启动微服务项目进行路由访问,我们访问其中一个模块的9868端口号下的/hello/doLogin路径,从这里开始就通过网关的路由,走向了8080端口中的路径下的doLogin方法

下图可以看出我访问9869端口已经路由到了8080端口号中。

2.1.2 动态路由

        在Spring Cloud Gateway中,动态路由可以基于配置文件实现,使用特定的配置项来描述动态路由规则。这通常涉及使用服务注册中心(如Eureka、Consul、Nacos等)以及路由规则的配置。

以下是一个基于Nacos和动态路由的简单示例:

1.添加依赖:

        首先,确保您的项目中添加了与Nacos和Spring Cloud Gateway相关的依赖。例如,在Maven项目中,可以添加如下依赖:

<dependencies>
    <!-- Spring Cloud Gateway -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>

    <!-- Spring Cloud Alibaba Nacos -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <!-- 集成Nacos Config,实现分布式配置中心的功能 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
</dependencies>

2.配置文件:

        在application.yml或application.properties中配置Nacos和动态路由的相关信息,如下图:

        在yml配置中,discovery.locator.enabled 启用了服务发现,lower-case-service-id 将服务ID转换为小写以便匹配规则。routes 中的配置定义了一个动态路由规则,将请求路径为 /dynamic/** 的请求转发到服务名为 service-name 的服务。 

3.Nacos配置:

        在Nacos配置中心中创建相应的配置,以便动态调整路由规则。例如,可以创建一个配置项名为 gateway-routes,内容如下:

[ { "id": "dynamic-route", "uri": "lb://service-name", "predicates": [{"Path": "/dynamic/**"}] } ]

4动态刷新:

        使用Spring Cloud Gateway的动态刷新机制,可以在Nacos配置中心中更新 gateway-routes 配置项的内容,Gateway将自动刷新并应用新的路由规则。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GatewayConfig {

    @Value("${gateway.routes}")
    private String dynamicRoutes;  // 从配置文件中读取的动态路由配置

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                // 静态路由规则
                .route("static-route", r -> r.path("/static/**").uri("lb://service-name"))
                // 动态路由规则,从配置文件中读取
                .route("dynamic-route", r -> r.path("/dynamic/**").uri(dynamicRoutes))
                .build();
    }
}

在 application.properties 或 application.yml 文件中,我们可以像这样定义动态路由: gateway.routes=lb://dynamic-service

然后,当我们在配置文件中修改 gateway.routes 的值时,Spring Cloud Gateway 将自动检测到变化并重新加载路由规则。

总体来说,通过结合Nacos配置中心和Spring Cloud Gateway的服务发现功能,可以实现基于配置文件的动态路由。通过在Nacos中配置路由规则,实现动态调整路由而无需重新启动应用。

SpringCloud是一个基于Spring Boot的开源微服务框架。SpringCloud GatewaySpringCloud生态中的一个组件,提供了一种基于路由的API网关解决方案。JWT是JSON WEB Token的缩写,是一种用于身份认证和授权的开放标准。OAuth2是一种授权框架,用于向用户授权第三方应用访问他们的资源。 在微服务架构中,每个服务都是独立的,网关作为服务的入口,可以实现对外的请求过滤和路由SpringCloud Gateway使用HttpClient进行内部请求的调度和路由。同时,它还提供了一些高阶的路由和过滤功能,如重定向、URL重写、限流、熔断、重试等。 JWT是一种轻量级的认证方案,通过在HTTP请求中添加一个JSON WEB Token,实现对用户进行身份认证和授权。JWT的使用极大地简化了认证过程,前后端可以通过JWT判断用户的身份和权限。 OAuth2为开发者提供了一种授权框架,可以授权第三方应用获取用户访问他们的资源。OAuth2支持多种授权类型,如授权码模式、密码模式、客户端模式和隐式模式。使用OAuth2,可以更好地保护用户的隐私和安全。 综上所述,SpringCloud Gateway、JWT和OAuth2都是现代化的解决方案,对于设计和开发微服务架构的应用程序来说,它们都是必不可少的组件。有了它们,开发人员可以更好的搭建分布式架构,确保数据安全性、隐私安全性和服务的可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值