Spring Cloud Gateway
1. 简介
SpringCloud Gateway 旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,使用的是Spring Boot和Spring Webflux提供的Netty底层环境,不能和传统的Servlet容器一起使用,也不能打包成一个WAR包。
SpringCloud官 对SpringCloud Gateway 特征介绍如下:
(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
(2)集成 Hystrix 断路器
(3)集成 Spring Cloud DiscoveryClient
(4)Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters
(5)具备一些网关的高级功能:动态路由、限流、路径重写
从以上的特征来说,和Zuul的特征差别不大。SpringCloud Gateway和Zuul主要的区别,还是在底层的通信框架上。
简单说明一下上文中的三个术语:
(1)Filter(过滤器):
和Zuul的过滤器在概念上类似,可以使用它拦截和修改请求,并且对上游的响应,进行二次处理。过滤器为org.springframework.cloud.gateway.filter.GatewayFilter类的实例。
(2)Route(路由):
网关配置的基本组成模块,和Zuul的路由配置模块类似。一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。
(3)Predicate(断言):
这是一个 Java 8 的 Predicate,可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。断言的输入类型是一个 ServerWebExchange。
2. 基本用法
SpringCloud Gateway 支持两种不同的用法:
- 编码式
- yml 配置
2.1 首先来看编码式:
创建 Spring Boot 项目,添加依赖:
项目创建成功后,直接配置一个 RouteLocator 这样一个Bean,就可以实现请求转发。
@Bean
RouteLocator routeLocator(RouteLocatorBuilder builder){
// 可以添加多个
return builder.routes()
// 访问网址 http://httpbin.org
// 通过网关后访问 http://localhost:8080/get
.route("javaboy", r -> r.path("/get").uri("http://httpbin.org"))
.build(