路由规则(predicates判断条件)
Path
spring:
application:
name: cloud-gateway-gateway
cloud:
gateway:
routes:
# 路由的ID,没有固定规则,但要求唯一,建议配合服务名
- id: payment_routh
# 匹配后提供服务的路由地址
uri: http://localhost:8001
# 断言,路径相匹配的进行路由
predicates:
- Path=/payment/get/**
Query
请求中是否包含指定的参数
spring:
application:
name: cloud-gateway-gateway
cloud:
gateway:
routes:
# 路由的ID,没有固定规则,但要求唯一,建议配合服务名
- id: payment_routh
# 匹配后提供服务的路由地址
uri: http://localhost:8001
# 断言,路径相匹配的进行路由
predicates:
- Query=token,abc. #匹配请求参数中包含token,并且参数值必须满足abc的请求
Method
匹配对应的匹配方式
spring:
application:
name: cloud-gateway-gateway
cloud:
gateway:
routes:
# 路由的ID,没有固定规则,但要求唯一,建议配合服务名
- id: payment_routh
# 匹配后提供服务的路由地址
uri: http://localhost:8001
# 断言,路径相匹配的进行路由
predicates:
- Method=GET #匹配任意Get请求
DateTime
远程调用
spring:
application:
name: cloud-gateway-gateway
cloud:
gateway:
routes:
# 路由的ID,没有固定规则,但要求唯一,建议配合服务名
- id: payment_routh
# 匹配后提供服务的路由地址
uri: http://localhost:8001
# 断言,路径相匹配的进行路由
predicates:
- RemoteAddr=192.168.1.0 #匹配远程地址
Header
根据请求头来匹配路由
spring:
application:
name: cloud-gateway-gateway
cloud:
gateway:
routes:
# 路由的ID,没有固定规则,但要求唯一,建议配合服务名
- id: payment_routh
# 匹配后提供服务的路由地址
uri: http://localhost:8001
# 断言,路径相匹配的进行路由
predicates:
- Header=X-Request-Id, \d+ #匹配请求头包含X-Request-Id 并且其值匹配正则表达式 \d+的请求
动态路由
我们在项目中再uri写上IP+端口地址不现实
动态路由其实就是面向服务的路由,Spring Cloud GateWay支持与Eureka整合开发,根据ServiceId自动从注册中心获取服务地址并转发请求,这样做的好处不仅可以通过单个端点来访问应用的所有服务,而且在添加或移除服务实例时不用修改GateWay的路由配置
1、添加依赖
2、动态获取URI
(1)配置文件
(2)服务名称转发
可以看出这里没有写url中的服务名称,但是需要在请求的时候加上微服务的名称和资源