本篇文章使用一个简单的示例来演示Spring Cloud Gateway的使用方法。
网关的应用场景
网关是所有微服务的门户,我总结了一些网关的常用应用场景。
Spring Cloud Gateway中几个比较重要的概念
- 路由(Route):它是网关的基本组件,由ID、目标URI、Predicate集合、Filter集合组成。
- 断言(Predicate):参照Java8的新特性Predicate,允许开发人员匹配HTTP请求中的任何内容,比如头或参数。
- 过滤器(Filter):可以在返回请求之前或之后修改请求和响应的内容。
断言
断言是Java 8提供的一个函数式接口,它允许接收一个参数并返回一个布尔值,可以用于条件过滤、请求参数的校验。
Spring Cloud Gateway 默认提供了许多断言,这些断言的源码在 org.springframework.cloud.gateway.handler.predicate
包中。这些断言会分别匹配 HTTP 请求的不同属性,并且多个断言可以通过 and 逻辑进行组合。
过滤器
过滤器分为Pre类型的过滤器和Post类型的过滤器。
- Pre类型的过滤器在请求转发到后端微服务之前执行,在Pre类型过滤器链中可以做鉴权、限流等操作。
- Post类型的过滤器在请求执行完之后、将结果返回给客户端之前执行。
在 Spring Cloud Gateway 中内置了很多过滤器,过滤器有两种实现,分别是 GatewayFilter
和 GlobalFilter
。 GlobalFilter
会应用到所有的路由上,而 GatewayFilter
只会应用到单个路由或者一个分组的路由上。
环境搭建
搭建项目前需要先启动 Nacos 服务。我比较喜欢使用 Docker 安装、启动 Nacos 。如果你对这种方式感兴趣,可以参考我之前写的一篇文章传送门。
项目结构
项目名称 | 端口号 | 说明 |
---|---|---|
jasmine-cloud | -- | 父工程 |
jasmine-gateway | 9010 | 网关服务,服务注册到nacos |
jasmine-auth | 901 |