Spring Cloud Alibaba学习笔记(16) - Spring Cloud Gateway 内置的路由谓词工厂
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 内置的路由谓词工厂的更多相关文章
- Spring Cloud Alibaba学习笔记(17) - Spring Cloud Gateway 自定义路由谓词工厂
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的路由谓词工厂,但是如果这些内置的路由谓词工厂不能满足业务需求的话,我们可以自定义路由谓词工厂来实现特定的需求. 例如有某个服务 ...
- Spring 源码学习笔记10——Spring AOP
Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...
- Spring 源码学习笔记11——Spring事务
Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...
- Flutter学习笔记(36)--常用内置动画
如需转载,请注明出处:Flutter学习笔记(36)--常用内置动画 Flutter给我们提供了很多而且很好用的内置动画,这些动画仅仅需要简单的几行代码就可以实现一些不错的效果,Flutter的动画分 ...
- Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba
Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...
- Spring Cloud Alibaba学习笔记(21) - Spring Cloud Gateway 自定义全局过滤器
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的全局过滤器,本文介绍如何自定义全局过滤器. 自定义全局过滤需要实现GlobalFilter 接口,该接口和 GatewayFi ...
- Spring Cloud Alibaba学习笔记(19) - Spring Cloud Gateway 自定义过滤器工厂
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的内置过滤器工厂,若Spring Cloud Gateway内置的过滤器工厂无法满足我们的业务需求,那么此时就需要自定义自己的过 ...
- Spring Cloud Alibaba学习笔记(15) - 整合Spring Cloud Gateway
Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它 ...
- Spring Cloud Alibaba学习笔记(3) - Ribbon
1.手写一个客户端负载均衡器 在了解什么是Ribbon之前,首先通过代码的方式手写一个负载均衡器 RestTemplate restTemplate = new RestTemplate(); // ...
随机推荐
- hdoj - 1342 Lotto
Problem Description In a Lotto I have ever played, one has to select 6 numbers from the set {1,2,... ...
- 下载根目录下的pdf文件, 浏览器下载
public void outPut(HttpServletRequest request, HttpServletResponse response, Integer type) { ClassPa ...
- CTF PHP反序列化
目录 php反序列化 一.序列化 二.魔术方法 1.构造函数和析构函数 2.__sleep()和__wakeup() 3.__toString() 4.__set(), __get(), __isse ...
- mysql死锁(锁与事务)
线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”. Oh, My God! 是死锁问题.尽管报错不多,对性能目前看来 ...
- top中的wa的理解
CPU使用率:参考 mpstat 手册,%usr + %nice + %sys + %iwoait + %irq + %soft + %steal + %guest + %gnice + %idle ...
- Partition-wise join
什么是“partition-wise join”呢?我们将用一个比喻来解释它的好处. 假设两个人,Logan和Shannon,决定住在一起.如果他们每个人都已经有了自己的住所,他们就会拥有很多你在任何 ...
- 安装Rancher容器化管理平台
卸载已有的避免冲突 yum remove docker docker-common docker-selinux docker-engine 安装需要的软件包,yum-util 提供yum-co ...
- [转]eclipse中explorer显示方式
原文地址:https://www.cnblogs.com/gne-hwz/p/7590451.html 不知道是不是上面的描述.做个记录 project explorer 项目资源管理器 这个要打开代 ...
- [转]c++多线程编程之pthread线程深入理解
多线程编程之pthread线程深入理解 Pthread是 POSIX threads 的简称,是POSIX的线程标准. 前几篇博客已经能给你初步的多线程概念.在进一 ...
- matlab学习笔记8 基本绘图命令-特殊图形绘制
一起来学matlab-matlab学习笔记8 基本绘图命令_3 特殊图形绘制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等 ...