一、SpringCloud Gateway 概述
SpringCloudGateway是SpringCloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。
使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改。
二、SpringCloud Gateway 案例
1、引入依赖
<dependencies>
<!-- 引入 Spring Cloud Gateway 相关依赖,使用它作为网关,并实现对其的自动配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
2、网关路由配置
2.1新的gateway网关路由配置有两种方式:
- 通过@Bean自定义RouteLocator配置
- 在配置文件yml中配置
2.2自定义RouteLocator配置
@Configuration
public class GatewayConfiguration{
RouteLocator routeLocator (@Autowired RouteLocatorBuilder builder){
return builder.routes()
.route(" provider", j->j.path("/provider/**").uri("lb://Nacos-01-Provider"))
.build();
/* - id: provider
uri: lb://Nacos-01-Provider
predicates:
- Path=/provider*//***/
}
}
2.3配置文件yml配置
spring:
cloud:
gateway:
routes:
- id: wya #一个路由(服务)的唯一标识
uri: http://www.jp626.top/ #服务的地址
predicates: #过滤条件
- Path=/index
Predicate
spring cloud gateway 通过谓词(Predicate)来匹配来自用户的请求
1、After 通过时间匹配:
spring:
cloud:
gateway:
routes:
- id: wya #一个路由(服务)的唯一标识
uri: http://www.jp626.top/ #服务的地址
predicates:
- After=2021-09-01T01:01:01+08:00[Asia/Shanghai]
表示,请求时间在 2021-09-01T01:01:01+08:00[Asia/Shanghai] 时间之后,才会被路由。 除了 After 之外,还有两
个关键字: Before.
2、Method 通过请求方式匹配:
spring:
cloud:
gateway:
routes:
- id: wya #一个路由(服务)的唯一标识
uri: http://www.jp626.top/ #服务的地址
predicates:
- Method=GET
表示这个配置表示只给 GET 请求进行路由
3、Path 通过请求路径匹配:(重点)
spring:
cloud:
gateway:
routes:
- id: wya #一个路由(服务)的唯一标识
uri: http://www.jp626.top/ #服务的地址
predicates:
- Path=/index
表示路径满足 index这个规则,都会被进行转发到http://www.jp626.top/index
4、Cookie 通过Cookie匹配
spring:
cloud:
gateway:
routes:
- id: wya #一个路由(服务)的唯一标识
uri: http://www.jp626.top/ #服务的地址
predicates:
- Cookie=CookieName, .*jie.*
这里判断cookie的 CookieName是否包含"jie" 是的话就路由到对应的服务上去
5、Header 通过请求头匹配
spring:
cloud:
gateway:
routes:
- id: wya #一个路由(服务)的唯一标识
uri: http://www.jp626.top/ #服务的地址
predicates:
- Header=requestId
表示请求头中一定要有 requestId 参数才会进行转发,否则不会进行转发。也可以指定参数和参数的值
三、运行测试
访问 http://localhost:7005/index,路由转发到 http://www.jp626.top/index