Spring Cloud Gateway路由规则

概念解释:

Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发

Predicate(谓语、断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:Path、Query、Method、Header等

Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容

Spring Cloud GateWay 工作流程如下所示:
link
客户端向Spring Cloud Gateway发出请求
如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序
此处理程序运行时通过特定于请求的筛选链发送请求
过滤器被虚线分隔的原因是过滤器可以在发送代理请求之前或之后执行逻辑
执行所有“预”过滤逻辑,然后发出代理请求
在发出代理请求后,将执行“post”过滤器逻辑

开始使用

Spring Cloud Gateway目前有两种方式进行配置:

  1. application.yml配置文件方式
  2. 通过@Bean注解RouteLocator方法返回值

在本章会侧重针对配置文件方式进行讲解,当然RouteLocator方式也会简单的告诉大家的使用方式

添加依赖

添加Spring Cloud Gateway相关依赖,pom.xml如下所示:

//...省略部分内容
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>
### Spring Cloud Gateway 跆由规则配置示例与教程 Spring Cloud Gateway 是一个基于 Spring 5 和 Project Reactor 的 API 网关,它提供了强大的路由和过滤功能。以下是关于 Spring Cloud Gateway 路由规则配置的相关信息和示例。 #### 1. 路由规则的基本组成 路由是网关的基本单元,由以下部分组成[^1]: - **ID**:路由的唯一标识符。 - **URI**:目标服务的地址,可以是 HTTP URI 或者服务发现中的服务名。 - **Predicate(断言)**:用于匹配请求的条件,例如路径、查询参数、方法等。 - **Filter(过滤器)**:在请求或响应过程中执行特定逻辑的组件。 #### 2. 示例配置 以下是一个典型的 Spring Cloud Gateway 配置示例: ```yaml server: port: 8080 spring: cloud: gateway: routes: - id: service1_route uri: http://localhost:8081 predicates: - Path=/service1/** filters: - AddRequestHeader=Service1-Header, Service1-Value - id: service2_route uri: http://localhost:8082 predicates: - Path=/service2/** - Method=GET filters: - StripPrefix=1 ``` #### 3. 常见 Predicate 类型 Spring Cloud Gateway 提供了多种内置的 Predicate 工厂,常见的有以下几种: - **Path**:根据请求路径进行匹配。 ```yaml predicates: - Path=/api/v1/** ``` - **Query**:根据查询参数进行匹配。 ```yaml predicates: - Query=name ``` - **Method**:根据 HTTP 方法进行匹配。 ```yaml predicates: - Method=POST ``` - **Before/After**:根据时间戳进行匹配。 ```yaml predicates: - Before=2023-01-01T00:00:00+08:00[Asia/Shanghai] ``` #### 4. 动态路由配置 如果未显式配置路由规则Spring Cloud Gateway 可以通过服务发现机制自动注册路由[^2]。启用此功能需要在配置文件中添加以下内容: ```yaml spring: cloud: gateway: discovery: locator: enabled: true ``` 当此功能启用后,Gateway 会自动将服务发现中的服务注册为路由,并通过 `RoutePredicateHandlerMapping` 类完成动态路由的创建[^2]。 #### 5. 过滤器配置 过滤器用于修改请求或响应的内容。以下是一些常用的过滤器配置示例: - **AddRequestHeader**:为请求添加头部信息。 ```yaml filters: - AddRequestHeader=X-Request-ID, 123456 ``` - **StripPrefix**:移除指定数量的路径前缀。 ```yaml filters: - StripPrefix=1 ``` #### 6. 时间条件下的路由配置 可以通过 `Before` 和 `After` 断言来限制路由的有效时间段。例如,以下配置表示在指定时间之前允许路由[^3]: ```yaml spring: cloud: gateway: routes: - id: time_sensitive_route uri: http://localhost:8081 predicates: - Path=/time-sensitive - Before=2023-12-31T23:59:59+08:00[Asia/Shanghai] ``` #### 7. Path 匹配规则 `Path` 断言可以根据请求路径进行匹配。例如,以下配置表示匹配 `/payment/{segment}` 的路径[^4]: ```yaml spring: cloud: gateway: routes: - id: payment_route uri: https://www.baidu.com predicates: - Path=/payment/{segment} ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值