文章目录
前言
Spring Cloud Gateway提供了一种简单而又有效的路由到API的方式,我们可以通过Gateway网关路由到后端服务,无需后端应用提供ip、域名等信息。
一、引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
注意引入依赖的时候,要把spring-boot-starter-web
依赖去掉,否则会报错。官方文档也有提示我们gateway的运行要求是spring boot提供Netty的运行环境,不能在传统的servlet容器或者打出来的war包中运行。
引入spring-boot-starter-web
依赖的错误提示,如下:
官网给予我们的提示
二、谓词工厂(路由条件)
Spring Cloud Gateway的谓词,简单的理解就是路由的执行条件是什么,即if(谓词条件)为true了,就执行。
1.路由示例
代码如下(示例):
spring:
application:
name: springcloud-gateway
cloud:
gateway:
routes:
- id: backend-service
uri: lb://backend-service
predicates:
- After=2024-03-03T12:11:50.861+08:00[Asia/Shanghai]
- Path=/api/**,/user/query
A. 上边的配置的含义是:在2024年3月3号之后才可以访问backend-service服务的api所有接口以及user查询接口。
B. 谓词条件可以根据情况组合使用,也可以单独使用。
C. 通过网关访问服务时,ip和端口就可以使用网关的ip端口,api地址路径还是用后端服务的。
注意
:After的时间得是上边的时区格式才行,可以用java的ZonedDateTime生成System.out.println(ZonedDateTime.now());
2.其他谓词
在predicates处修改相应的配置就可以实现不同条件形式的路由转发功能。
2.1 Before
request请求在时间配置的时间之前可以访问
predicates:
- Before=2024-03-03T18:11:50.861+08:00[Asia/Shanghai]
- Path=/api/**
2.2 Between
request请求在时间区间内可以访问
predicates:
- Between=2024-03-03T18:11:50.861+08:00[Asia/Shanghai],2024-03-05T18:11:50.861+08:00[Asia/Shanghai]
- Path=/api/**
2.4 Cookie
request请求匹配了缓存的键值对时可访问
predicates:
- Cookie=user,zhangsan
- Path=/api/**
2.5 Header
request请求的请求头header里有名为X-Request-Id
且值是一个token时可访问
predicates:
- Header=X-Request-Id,token随机字符串
- Path=/api/**
2.6 Host
request请求中包含要求的主机时可访问
predicates:
- Host=**.test.com,**.prod.com
- Path=/api/**
2.7 Method
request请求中是POST或GET请求的可访问
predicates:
- Method=POST,GET
- Path=/api/**
2.8 Path
request请求中的uri地址是path中配置的可访问,见上边的示例。
2.9 Query
request请求中是含有查询参数时可访问
predicates:
- Query=user
- Path=/api/**
例如访问地址:http://127.0.0.1:8080/api/createUser?user=zs
2.10 RemoteAddr
是固定的ip地址的机器的request请求中可访问
predicates:
- RemoteAddr=192.168.1.1/24
- Path=/api/**
2.11 Weight
根据权重分配请求
spring:
cloud:
gateway:
routes:
- id: backend-service-vip
uri: lb://backend-service
predicates:
- Weight=vip,8
- Path=/api/**,/user/query1
- id: backend-service-common
uri: lb://backend-service
predicates:
- Weight=comm,2
- Path=/api/**,/user/query2
总结
Gateway为我们提供了一种通过配置即可使用的网关,它满足了我们大部分日常的路由需求。