路由规则(predicates判断条件)

Path

  1. spring:
  2. application:
  3. name: cloud-gateway-gateway
  4. cloud:
  5. gateway:
  6. routes:
  7. # 路由的ID,没有固定规则,但要求唯一,建议配合服务名
  8. - id: payment_routh
  9. # 匹配后提供服务的路由地址
  10. uri: http://localhost:8001
  11. # 断言,路径相匹配的进行路由
  12. predicates:
  13. - Path=/payment/get/**

Query

请求中是否包含指定的参数

  1. spring:
  2. application:
  3. name: cloud-gateway-gateway
  4. cloud:
  5. gateway:
  6. routes:
  7. # 路由的ID,没有固定规则,但要求唯一,建议配合服务名
  8. - id: payment_routh
  9. # 匹配后提供服务的路由地址
  10. uri: http://localhost:8001
  11. # 断言,路径相匹配的进行路由
  12. predicates:
  13. - Query=token,abc. #匹配请求参数中包含token,并且参数值必须满足abc的请求

Method

匹配对应的匹配方式

  1. spring:
  2. application:
  3. name: cloud-gateway-gateway
  4. cloud:
  5. gateway:
  6. routes:
  7. # 路由的ID,没有固定规则,但要求唯一,建议配合服务名
  8. - id: payment_routh
  9. # 匹配后提供服务的路由地址
  10. uri: http://localhost:8001
  11. # 断言,路径相匹配的进行路由
  12. predicates:
  13. - Method=GET #匹配任意Get请求

DateTime

远程调用

  1. spring:
  2. application:
  3. name: cloud-gateway-gateway
  4. cloud:
  5. gateway:
  6. routes:
  7. # 路由的ID,没有固定规则,但要求唯一,建议配合服务名
  8. - id: payment_routh
  9. # 匹配后提供服务的路由地址
  10. uri: http://localhost:8001
  11. # 断言,路径相匹配的进行路由
  12. predicates:
  13. - RemoteAddr=192.168.1.0 #匹配远程地址

Header

根据请求头来匹配路由

  1. spring:
  2. application:
  3. name: cloud-gateway-gateway
  4. cloud:
  5. gateway:
  6. routes:
  7. # 路由的ID,没有固定规则,但要求唯一,建议配合服务名
  8. - id: payment_routh
  9. # 匹配后提供服务的路由地址
  10. uri: http://localhost:8001
  11. # 断言,路径相匹配的进行路由
  12. predicates:
  13. - Header=X-Request-Id, \d+ #匹配请求头包含X-Request-Id 并且其值匹配正则表达式 \d+的请求

动态路由

我们在项目中再uri写上IP+端口地址不现实
image.png

动态路由其实就是面向服务的路由,Spring Cloud GateWay支持与Eureka整合开发,根据ServiceId自动从注册中心获取服务地址并转发请求,这样做的好处不仅可以通过单个端点来访问应用的所有服务,而且在添加或移除服务实例时不用修改GateWay的路由配置

1、添加依赖

image.png

2、动态获取URI

(1)配置文件

配置注册中心和动态路由规则(通过注册中心)
image.png

(2)服务名称转发

image.png
可以看出这里没有写url中的服务名称,但是需要在请求的时候加上微服务的名称和资源
image.png