首页 > 编程语言 > 详细

Spring Cloud Gateway 入门

时间:2020-06-26 22:55:04      阅读:53      评论:0      收藏:0      [点我收藏+]

Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。

Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如说安全认证、监控、限流等等。

Spring Cloud Gateway 定位于取代 Netflix Zuul,成为 Spring Cloud 生态系统的新一代网关。目前看下来非常成功,老的项目的网关逐步从 Zuul 迁移到 Spring Cloud Gateway,新项目的网关直接采用 Spring Cloud Gateway。相比 Zuul 来说,Spring Cloud Gateway 提供更优秀的性能,更强大的有功能。

Spring Cloud Gateway 的特征如下:

  • 基于 Java 8 编码
  • 基于 Spring Framework 5 + Project Reactor + Spring Boot 2.0 构建
  • 支持动态路由,能够匹配任何请求属性上的路由
  • 支持内置到 Spring Handler 映射中的路由匹配
  • 支持基于 HTTP 请求的路由匹配(Path、Method、Header、Host 等等)
  • 集成了 Hystrix 断路器
  • 过滤器作用于匹配的路由
  • 过滤器可以修改 HTTP 请求和 HTTP 响应(增加/修改 Header、增加/修改请求参数、改写请求 Path 等等)
  • 支持 Spring Cloud DiscoveryClient 配置路由,与服务发现与注册配合使用
  • 支持限流

 

快速入门

GitHub地址

git@github.com:spring-cloud/spring-cloud-gateway.git
切换分支
git checkout -b a1 v3.0.0.M1

编译打包
mvn package -Dmaven.test.skip=true -Dcheckstyle.skip=true

 

 

引入依赖

<properties>
        <spring.boot.version>2.2.4.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR1</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.0.RELEASE</spring.cloud.alibaba.version>
    </properties>

    <!--
        引入 Spring Boot、Spring Cloud、Spring Cloud Alibaba 三者 BOM 文件,进行依赖版本的管理,防止不兼容。
        在 https://dwz.cn/mcLIfNKt 文章中,Spring Cloud Alibaba 开发团队推荐了三者的依赖关系
     -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- 引入 Spring Cloud Gateway 相关依赖,使用它作为网关,并实现对其的自动配置 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>

 

 

配置文件

创建application.yml配置文件,添加Spring Cloud Gateway相关配置:

spring:
  cloud:
    # Spring Cloud Gateway 配置项,对应 GatewayProperties 类
    gateway:
      # 路由配置项,对应 RouteDefinition 数组
      routes:
        - id: baidu # 路由的编号
          uri: https://www.baidu.com # 路由到的目标地址
          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
            - Path=/baidu
          filters:
            - StripPrefix=1
        - id: sina # 路由的编号
          uri: https://www.sina.com.cn # 路由的目标地址
          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
            - Path=/sina
          filters: # 过滤器,对请求进行拦截,实现自定义的功能,对应 FilterDefinition 数组
            - StripPrefix=1

 

 spring.cloud.gateway 配置项:Spring Cloud Gateway配置项,对应GatewayProperties类。

这里主要使用的 routes 路由配置项,对应RouteDefinition数组。路由(Route)是Gateway中最基本的组件之一,由一个IDURI、一组谓语(Predicate)、过滤器(Filter)组成。

技术分享图片

  • ID:编号,路由的唯一标识;
  • URI:路由指向的目标 URI,即请求最终被转发的目的地;
  • Predicate:谓语,作为路由的匹配条件。Gateway 内置了多种 Predicate 的实现,提供了多种请求的匹配条件,比如说基于请求的 Path、Method 等等;
    • 这里配置的 Path 匹配请求的 Path 地址。
  • Filter:过滤器,对请求进行拦截,实现自定义的功能。Gateway 内置了多种 Filter 的实现,提供了多种请求的处理逻辑,比如说限流、熔断等等。
    • 这里配置的  StripPrefix  会将请求的 Path 去除掉前缀。

 

Spring Cloud Gateway 入门

原文:https://www.cnblogs.com/CodePastry/p/13196508.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!