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. CentOS 6和 CentOS 7的区别【转】

    虽然,redhat 8在今年已经推出了,但是centos 8还没有推出.而且公司好多都在用centos 6和7 来了解一下6和7的区别吧 整体说明 1.系统 项目CentOS 6CentOS7 . 安 ...

  2. Redis和MongoDB的区别以及应用场景

    Redis和MongoDB的区别以及应用场景 项目中用的是MongoDB,但是为什么用其实当时选型的时候也没有太多考虑,只是认为数据量比较大,所以采用MongoDB. 最近又想起为什么用MongoDB ...

  3. ip地址掩码和位数对应关系表、子网掩码、网络地址、主机地址-yellowcong

    本文链接:https://blog.csdn.net/yelllowcong/article/details/76736594ip的地址掩码,刚开始感觉特别蒙蔽,网掩码都是每段8位二进制,共32位,子 ...

  4. Node.js 实现第一个应用以及HTTP模块和URL模块应用

    /* 实现一个应用,同时还实现了整个 HTTP 服务器. * */ //1.引入http模块 var http=require('http'); //2.用http模块创建服务 /* req获取url ...

  5. 泡泡一分钟:GEN-SLAM - Generative Modeling for Monocular Simultaneous Localization and Mapping

    张宁  GEN-SLAM - Generative Modeling for Monocular Simultaneous Localization and Mapping GEN-SLAM  - 单 ...

  6. Tomcat 配置虚拟目录以及虚拟主机

    目录 虚拟目录 虚拟主机 虚拟目录 虚拟目录的功能 一般情况下,我们的打包后的项目都是放到tomcat/webapps目录下的,然后通过localhost:8080/project_name这个链接进 ...

  7. boost中g++ 链接undefined reference to `boost::system::generic_category()问题

    编译错误如下: g++ -std=c++11  tcp_session.cpp tcp_server.cpp test.cpp -o test -pthread/tmp/ccv4rZkD.o: In ...

  8. 嵌入式LINUX基础教程 第2版

    嵌入式LINUX基础教程  第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...

  9. 图像处理软件ImageJ

    ImageJ是一个基于java的公共的图像处理软件,它是由National Institutes of Health开发的.可运行于Microsoft Windows,Mac OS,Mac OS X, ...

  10. [LeetCode] 73. Set Matrix Zeroes 矩阵赋零

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. Exampl ...