Spring Cloud Gateway
Spring Cloud Gateway 特点
- 限流
- 路径重写
- 动态路由
- 集成 Spring Cloud DiscoveryClient
- 集成 Hystrix 断路器
Spring Cloud Gateway 和 Zuul 对比
- Zuul 是 Netflix 公司的开源产品,而 Spring Cloud Gateway 是 Spring 家族中的产品,可以和 Spring 家族中的其他组件更好的融合。
- Zuul1 不支持长连接,而 Spring Cloud Gateway 支持。例如 websocket。(Zuul 通常指的是 Zuul1 版本)
- Spring Cloud Gateway 支持限流。而 zuul 中没有自带限流。
- Zuul1 是基于 servlet 框架构建的,采用阻塞、多线程的方式,一个线程处理一次连接请求,这种请求方式在内部延迟严重,如果在故障较多的情况下,会引起存活的连接增多和线程增加,处理效率会低一些。
- 而 Spring Cloud Gateway 是基于 Netty 来开发,实现异步和非阻塞,占用资源更小,性能方面更加有优势,强于 zuul。
Spring Cloud Gateway 基本用法
编码式
- 首先创建一个 spring boot 项目,添加 spring cloud gateway 模块。
- 项目创建成功后,直接在启动类中配置一个 RouteLocator 这样一个 Bean,就可以实现请求转发。
- 测试接口:httpbin.org/get
- 配置完成后,访问 http://localhost:8090/get 会自动转发到 http://httpbin.org
yml 配置式
1 | spring: |
Spring Cloud Gateway 服务化,整合微服务
- 首先给 Gateway 添加依赖,将其注册到 Eureka 上。
- 配置 yml,将请求转发注释掉。
- 配置路由转发。
- 接下来就可以通过 gateway 访问到其他注册在 Eureka 上的服务了,访问方式和 zuul 一样,可以代理访问任何注册到 Eureka 上的服务。
- http://localhost:8090/PROVIDER/hello 注意 provider 需要大写,与注册到 Eureka 上的服务名一致。
Spring Cloud Gateway 中的 Predicate
参考文章:https://blog.csdn.net/qq_45627009/article/details/122135727
通过时间配置:
- After:在某个时间点 (ZonedDateTime) 之后的请求会命中该 Route
- Before:在某个时间点 (ZonedDateTime) 之前的请求会命中该 Route
- Between:在某时间之间的请求会命中该 Route
其他类型配置:
- Method:匹配请求的类型
- Path:匹配请求的 Path(Uri)
- Query:匹配 GET 请求的参数
- Weight :分组匹配权重
- RemoteAddr:匹配 IP 地址
- Header:匹配请求的 Header 参数
- Cookie:匹配请求中 Cookie 内容
Spring Cloud Gateway 中的 Filter
Spring Cloud Gateway 中的过滤器分为两大类:
- GatewayFilter 局部
- GlobalFilter 全局
AddRequestParameter 过滤器使用
1 | spring: |