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(); // ...
随机推荐
- node省市区三级数据性能测评
闲来无事,测试下node和egg 首先是数据库,大概长这样 然后是代码 'use strict'; const Controller = require('egg').Controller; clas ...
- devops 运维平台相关知识
1.https://choerodon.io/zh/community/ (代码 https://github.com/choerodon/choerodon) 猪齿鱼 2.https://www.o ...
- javascript如何动态修改iframe的src
为什么需要动态修改iframe的src?一般情况我们使用iframe,其中的src通常是写死的,但是有些时候我们不希望它是死的src,而是一个活的src. 示例代码如下: <!DOCTYPE h ...
- MySql分区后创建索引加速单表查询和连表查询
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/konkon2012/article/de ...
- win 10 系统安装后的配置
win10图片恢复默认照片查看器 1. 搜索栏”放大文本大小“ 调整字体大小 2. 桌面显示 我的电脑: 3. 关闭不必要的动画,ctrl+r,输入:control ,打开控制面板
- 使用Spring容器最简单的代码姿势
如果仅仅是为了测试简单使用一下Spring的IOC容器,或者研究一下Spring的容器的源码实现,那么在搭建Spring工程的时候,不需要复杂的xml配置.Spring3.0之后提供了Java注解配置 ...
- Docker 安装 redis 并实现配置文件启动,数据文件本地持久化
1,笔者使用的是 Linux 的 Centos7 版本 2,安装 Docker,不会安装可以移步 Docker 在 Linux 平台的安装 以及一些常见命令 3,下载 docker 镜像 3.1,首 ...
- [LeetCode] 110. Balanced Binary Tree 平衡二叉树
Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...
- bugclose使用—bug管理工具
1.前言 bugclose管理的是BUG,而不仅仅是bug.BUG概念是bugclose的创造,代表团队工作的对象,包括缺陷,任务和需求. 2.bugclose访问地址 访问地址:https://ww ...
- Procedural Mesh Component in C++:Getting Started
转自:https://wiki.unrealengine.com/Procedural_Mesh_Component_in_C++:Getting_Started I create a simple ...