1. 前言
第十二篇 至 第十九篇 用于后续完整其他组件,目前保留目录。
一、 网关 Gateway 的简介
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,
Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL。
Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
1. 相关概念
相关概念:
Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。
2. 工作流程
工作流程:
客户端向 Spring Cloud Gateway 发出请求。如果 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。 过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。
3. Gateway 的特征
Spring Cloud Gateway 的特征:
- 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
- Spring Cloud Gateway 底层使用了高性能的通信框架Netty。
- 动态路由
- Predicates 和 Filters 作用于特定路由
- 集成 Hystrix 断路器
- 集成 Spring Cloud DiscoveryClient
- 易于编写的 Predicates 和 Filters
- 限流
- 路径重写
二、网关 Gateway 的使用
Spring Cloud Gateway 网关路由有两种配置方式:
1.在配置文件 yml 中配置
2.通过@Bean自定义 RouteLocator,在启动主类 Application 中配置
这两种方式是等价的,建议使用 yml 方式进配置。
本实例将通过以上两种方式演示,且本模块依然在 SpringCloudParent 项目下进行。复制一个新模块修改模块名为:cloud_19_gateway_one ,在父模块和子模块中分别引入依赖。
1. 通过yml 的配置方式
1. 添加依赖包
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
由于Spring-Cloud-Gateway基于Netty的运行时环境启动,不需要引入带Servlet容器的spring-boot-starter-web。
2. 配置 application.yml 文件
server:
port: 9120
spring:
cloud:
gateway:
routes:
- id: yao_route
uri: https://www.jianshu.com/
predicates:
- Path=/u/9dc8cb9d87a5
配置含义如下:
id:我们自定义的路由 ID,保持唯一
uri:目标服务地址
predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
filters:过滤规则,本示例暂时没用。
yml 配置的意思是,配置了一个 id 为 yao_route 的路由规则,当访问地址 http://localhost:9120/u/9dc8cb9d87a5 时会自动转发到地址:https://www.jianshu.com/u/9dc8cb9d87a5 。