SpringCloud gateway 2.0 学习
1.相关依赖
<!-- 网关相关配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos相关依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- setinel 限流 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
</dependency>
2. 断言工厂
gateway网关内置上述断言工厂类,可以通过配置自由定义路由相关的转发规则
2.1 路由规则
网关地址 http://127.0.0.1:9000
服务地址 http://127.0.0.1:9001
2.1.1 根据注册中心serviceid进行路由
spring:
cloud:
gateway:
discovery:
#是否与服务发现组件结合,通过serviceid转发到具体服务实例
locator:
#是否开启基于服务发现的路由规则
enabled: true
#是否将服务名转为小写
lower-case-service-id: true
注册中心注册服务
service id: xxxx-api --> 127.0.0.1:9002
将 http://127.0.0.1:9001/xxxx-api/produce
通过网关转到 http://127.0.0.1:9002/produce
2.1.2 path路由
spring:
cloud:
gateway:
routes:
-id : xxx-api 路由id,唯一
uri: lb://xxx-api 目标URl,路由微服务地址
predicates: 断言(判断条件 )
- Path=/product/**
将 http://127.0.0.1:9001/produce路由到http://127.0.0.1:9002/produce
2.1.3 Query 参数匹配路由
spring:
cloud:
gateway:
routes:
-id : xxx-api 路由id,唯一
uri: lb://xxx-api 目标URl,路由微服务地址
predicates: 断言(判断条件 )
- Query=token 匹配请求参数中包含token的请求
- Query=token, abc. 匹配请求参数中包含token并且参数值满足 abc.的正则表达式
请求Query=token :
http://127.0.0.1:9001/produce?token=123 -->http://127.0.0.1:9000/produce?token=123
请求参数中包含token并且token参数值为abc.正则表达式匹配
http://127.0.0.1:9001/produce?token=abc4 -->http://127.0.0.1:9000/produce?token=abc4
http://127.0.0.1:9001/produce?token=abc 不会被路由
2.1.3 Method 请求方法路由
spring:
cloud:
gateway:
routes:
-id : xxx-api 路由id,唯一
uri: lb://xxx-api 目标URl,路由微服务地址
predicates: 断言(判断条件 )
- Method=GET 只有get请求会被路由
2.1.4 Datetime 请求时间路由
spring:
cloud:
gateway:
routes:
-id : xxx-api 路由id,唯一
uri: lb://xxx-api 目标URl,路由微服务地址
predicates: 断言(判断条件 )
- After=2022-04-19T20:20:20.000+08:00[Asia/Shanghai] 只有上海这个时间点后才会被路由
- Before = 时间点之前的请求
- Between= 之间的时间点
2.1.5 RemoteAddr
spring:
cloud:
gateway:
routes:
-id : xxx-api 路由id,唯一
uri: lb://xxx-api 目标URl,路由微服务地址
predicates: 断言(判断条件 )
- RemoteAddr=127.0.0.1 #匹配远程请求地址是127.0.0.1的请求路由
2.1.6Header
spring:
cloud:
gateway:
routes:
-id : xxx-api 路由id,唯一
uri: lb://xxx-api 目标URl,路由微服务地址
predicates: 断言(判断条件 )
#匹配请求头中包含XXX-SSS-A 并且值匹配正则表达式\d*的请求
-Header=XXX-SSS-A, \d*
以上的路由都可以组合使用