Spring Cloud Gateway路由配置的两种形式

Spring Cloud Gateway的路由配置有两种形式,分别是路由到指定的URL以及路由到指定的微服务,在上文博客的示例中我们就已经使用过路由到微服务的这种配置形式了。在这两种形式中,均支持访问路径的通配及精确匹配,在之前的示例中我们只使用了通配。所以本文将给出具体的配置示例,以此直观的了解这两种形式及不同匹配方式在配置上的区别。

路由配置必须与predicates配套使用才会生效!

路由到指定的URL

通配

使用通配符/**进行匹配,示例代码如下:

spring:
cloud:
gateway:
routes:
- id: {路由的唯一标识}
uri: http://www.xxx.com
predicates:
# 使用通配符匹配
- Path=/**

**该配置使访问 GATEWAY_URL/** 时会转发到 http://www.xxx.com/** **

精确匹配

配置具体的接口路径,示例代码如下:

spring:
cloud:
gateway:
routes:
- id: {路由的唯一标识}
uri: http://www.xxx.com/order/detail
predicates:
# 指定具体的路径进行匹配
- Path=/order/detail

该配置使访问 GATEWAY_URL/order/detail 时会转发到 http://www.xxx.com/order/detail

路由到指定的微服务

通配

spring:
cloud:
gateway:
routes:
- id: {路由的唯一标识} # 这种形式下通常是微服务名称
uri: lb://study01 # lb代表从注册中心获取服务
predicates:
# 使用通配符匹配
- Path=/**

**该配置使访问 GATEWAY_URL/** 时会转发到 study01微服务的/** **

精确匹配

spring:
cloud:
gateway:
routes:
- id: {路由的唯一标识} # 这种形式下通常是微服务名称
uri: lb://study01/order/detail # lb代表从注册中心获取服务
predicates:
# 指定具体的路径进行匹配
- Path=/order/detail

该配置使访问 GATEWAY_URL/order/detail时会转发到 study01微服务的/order/detail

内置的路由谓词工厂

Spring Cloud Gateway内置了一系列的路由谓词工厂,以便我们可以在开发中灵活的使用Gateway进行请求转发。

路由谓词工厂的作用是:符合Predicate的条件,就使用该路由的配置,否则就不管。

路由谓词工厂 作用 参数
After 当且仅当请求时的时间After配置的时间时,才转发该请求 一个带有时区的具体时间
Before 当且仅当请求时的时间Before配置的时间时,才转发该请求 一个带有时区的具体时间
Between 当且仅当请求时的时间Between配置的时间段时,才转发该请求 一个带有时区的具体时间段
Cookie 当且仅当请求时携带的Cookie名称及值与配置的名称及值相符时,才转发该请求 Cookie的名称及值,支持使用正则表达式来匹配值
Header 当且仅当请求时携带的Header名称及值与配置的名称及值相符时,才转发该请求 Header的名称及值,支持使用正则表达式来匹配值
Host 当且仅当请求时名为Host的Header的值与配置的值相符时,才转发该请求 Host的值,支持配置多个且支持使用通配符
Method 当且仅当请求时所使用的HTTP方法与配置的请求方法相符时,才转发该请求 HTTP请求方法,例如GET、POST等
Path 当且仅当请求时所访问的路径与配置的路径相匹配时,才转发该请求 通配符、占位符或具体的接口路径,可以配置多个
Query 当且仅当请求时所带有的参数名称与配置的参数名称相符时,才转发该请求 参数名称和参数值(非必须),支持使用正则表达式对参数值进行匹配
RemoteAddr 当且仅当请求时的IP地址与配置的IP地址相符时,才转发该请求 IP地址或IP段

After

示例配置:

spring:
cloud:
gateway:
routes:
- id: after_route
uri: lb://example-service
predicates:
# 当且仅当请求时的时间After配置的时间时,才转发该请求
# 若请求时的时间不是After配置的时间时,则会返回404 not found
- After=2019-10-28T12:34:42.917822900+08:00[Asia/Shanghai]

**注意:当predicates配置项只配置了一个Predicate且没有配置Path时,Path的默认值为/** 。所以该段配置会使访问 GATEWAY_URL/** 时转发到example-service微服务的/** **

Before

示例配置:

spring:
cloud:
gateway:
routes:
- id: before_route
uri: lb://example-service
predicates:
# 当且仅当请求时的时间Before配置的时间时,才转发该请求
- Before=2019-10-28T12:34:42.917822900+08:00[Asia/Shanghai]

Between

示例配置:

pring:
cloud:
gateway:
routes:
- id: between_route
uri: lb://example-service
predicates:
# 当且仅当请求时的时间Between配置的时间段时,才转发该请求
- Between=2019-10-28T12:34:42.917822900+08:00[Asia/Shanghai]:2019-10-29T12:34:42.917822900+08:00[Asia/Shanghai]

Cookie

示例配置:

spring:
cloud:
gateway:
routes:
- id: cookie_route
uri: lb://example-service
predicates:
# 当且仅当请求带有名为chocolate,并且值符合正则表达式 ch.p 的Cookie时,才转发该请求
- Cookie=chocolate, ch.p

Header

示例配置:

spring:
cloud:
gateway:
routes:
- id: header_route
uri: lb://example-service
predicates:
# 当且仅当请求带有名为X-Request-Id,并且值符合正则表达式 \d+ 的Header时,才转发该请求
- Header=X-Request-Id, \d+

Host

示例配置:

spring:
cloud:
gateway:
routes:
- id: host_route
uri: lb://example-service
predicates:
# 当且仅当名为Host的Header符合**.somehost.org或**.anotherhost.org时,才转发该请求
# 例如:www.somehost.org、beta.somehost.org、www.anotherhost.org等Host就满足该匹配
- Host=**.somehost.org,**.anotherhost.org

Method

示例配置:

spring:
cloud:
gateway:
routes:
- id: method_route
uri: lb://example-service
predicates:
# 当且仅当HTTP请求方法为GET时,才转发该请求
- Method=GET

Path

示例配置:

spring:
cloud:
gateway:
routes:
- id: path_route
uri: lb://example-service
predicates:
# 当且仅当访问路径是/foo/*、/some-example/list及/bar/**时,才转发该请求
# segment是一个特殊的占位符,表示单层路径匹配,而/**则是多层路径的匹配
- Path=/foo/{segment},/example/list,/bar/**

Query

示例配置一:

spring:
cloud:
gateway:
routes:
- id: query_route
uri: lb://example-service
predicates:
# 当且仅当请求带有名为baz的参数,才转发该请求
- Query=baz

示例配置二:

spring:
cloud:
gateway:
routes:
- id: query_route
uri: lb://example-service
predicates:
# 当且仅当请求带有名为foo的参数,且参数值与正则表达式 ba. 相匹配,才转发该请求
- Query=foo, ba.

RemoteAddr

示例配置:

spring:
cloud:
gateway:
routes:
- id: remoteaddr_route
uri: lb://example-service
predicates:
# 当且仅当请求IP是192.168.1.101/24网段,例如192.168.1.101,才转发该请求
- RemoteAddr=192.168.1.101/24

Spring Cloud Alibaba学习笔记(16) - Spring Cloud Gateway 内置的路由谓词工厂的更多相关文章

  1. Spring Cloud Alibaba学习笔记(17) - Spring Cloud Gateway 自定义路由谓词工厂

    在前文中,我们介绍了Spring Cloud Gateway内置了一系列的路由谓词工厂,但是如果这些内置的路由谓词工厂不能满足业务需求的话,我们可以自定义路由谓词工厂来实现特定的需求. 例如有某个服务 ...

  2. Spring 源码学习笔记10——Spring AOP

    Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...

  3. Spring 源码学习笔记11——Spring事务

    Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...

  4. Flutter学习笔记(36)--常用内置动画

    如需转载,请注明出处:Flutter学习笔记(36)--常用内置动画 Flutter给我们提供了很多而且很好用的内置动画,这些动画仅仅需要简单的几行代码就可以实现一些不错的效果,Flutter的动画分 ...

  5. Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba

    Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...

  6. Spring Cloud Alibaba学习笔记(21) - Spring Cloud Gateway 自定义全局过滤器

    在前文中,我们介绍了Spring Cloud Gateway内置了一系列的全局过滤器,本文介绍如何自定义全局过滤器. 自定义全局过滤需要实现GlobalFilter 接口,该接口和 GatewayFi ...

  7. Spring Cloud Alibaba学习笔记(19) - Spring Cloud Gateway 自定义过滤器工厂

    在前文中,我们介绍了Spring Cloud Gateway内置了一系列的内置过滤器工厂,若Spring Cloud Gateway内置的过滤器工厂无法满足我们的业务需求,那么此时就需要自定义自己的过 ...

  8. Spring Cloud Alibaba学习笔记(15) - 整合Spring Cloud Gateway

    Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它 ...

  9. Spring Cloud Alibaba学习笔记(3) - Ribbon

    1.手写一个客户端负载均衡器 在了解什么是Ribbon之前,首先通过代码的方式手写一个负载均衡器 RestTemplate restTemplate = new RestTemplate(); // ...

随机推荐

  1. git:GitLab代码回滚到特定版本

    在当前branch上多次commit代码并且push后,发现不符合要求,需要回滚到特定的版本.步骤如下: 1.查找commitId (1)用命令行打开git项目路径,输入git log命令查看comm ...

  2. Spark跑在Yarn上出现错误,原因是jdk的版本问题

    ./bin/spark-shell --master yarn 2019-07-01 12:20:13 WARN NativeCodeLoader:62 - Unable to load native ...

  3. 海底高铁(洛谷 P3406)

    题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...

  4. DML 语言

    数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集. 以INSERT.UPDATE.DELETE三种指令为核心,分别 ...

  5. solr(一) 单节点安装部署

    一.solr简介 1.什么是solr? Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件 ...

  6. jmeter(四十四)常用性能指标分析

    概述 我们在用jmeter做性能测试的时候,有一些关键性的性能指标需要去分析.但是由于开源工具本身的局限性,这些指标在工具中的命名极易对我们造成混淆.所以我们需要对这些指标一一进行剖析. 指标分析 响 ...

  7. 设置应用程序的样式并对其进行部署——《Python编程从入门到实践》

    我们将使用应用程序django-bootstrap3为Web应用程序设计样式.我们将把项目"学习笔记"部署到Heroku,这个网站能让我们们将项目推送到其服务器,让任何有网络连接的 ...

  8. 第09组 Beta冲刺(1/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...

  9. c++ 字符串时间格式转换为时间 判断有效期

    转载:https://www.cnblogs.com/maphc/p/3462952.html #include <iostream> #include <time.h> us ...

  10. maven引入CDH依赖包

    1. POM文件加入仓库 注意:id要和仓库配置中的id一致. <repositories> <repository> <id>cloudera</id> ...