Spring Cloud Gateway 学习+实践
官网上给出的Spring Cloud Gateway特性如下图所示:

翻译过来就是:
- 基于 Spring Framework 5 ,Project Reactor 以及 Spring Boot 2.0 构建
- 路由能够匹配任何请求属性
- Predicates和Filters可以区分路由生效
- 集成了断路器
- 继承了Spring Cloud DiscoveryClient
- 轻松编写Predicates和Filters
- 请求流控
- 路径重写

通过上面的图片可以看出Spring Cloud Gateway的主要功能是由Predicate、Filter以及Route实现,同时也能看出这里对应到了新特性里的“Predicates和Filters可以区分路由生效”。
Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。
Predicate(断言):路由转发的判断条件,目前Spring Cloud Gateway支持多种方式,常见如:Path、Query、Method、Header等,写法必须遵循 key=vlue的形式。
Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容等。
路由和过滤器的概念在之前Zuul网关的学习中也有所涉及,这里重点学习一下Predicate:
在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性实现了各种路由匹配规则,有通过 Header、请求参数等不同的条件来进行作为条件匹配到对应的路由。网上有一张图总结了 Spring Cloud 内置的几种 Predicate 的实现。

图中的谓语就是Predicate的另一种翻译,也可以看到有很多类型的Predicate。比如说时间类型的Predicate(AfterRoutePredicateFactory、BeforeRoutePredicateFactory以及BetweenRoutePredicateFactory),当只有满足特定时间要求的请求会进入到此Predicate中,并交由Route处理;Cookie类型的CookieRoutePredicateFactory,指定的Cookie满足正则匹配,才会进入此Route。此外还有Host、Method、Path、Queryparam、Remoteaddr类型的Predicate,每一种Predicate都会对当前的客户端请求进行判断。
接下来通过一个具体的例子来感受一些Spring Cloud Gateway:

pom中添加相关依赖,由于Spring Cloud Gateway继承了断路器,因此也需要添加hystrix的依赖,否则会出现报错:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
如果启动时有报java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException。那是由于版本冲突,需要手动添加jackson的依赖并指定明确的版本(2.8.5以上):
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.9.5</version>
</dependency>
具体的Route、Predicate、Filter等设置可以通过代码或者配置文件来实现,这里我们还是通过application.yml来实现:
server:
port: 10290
spring:
application:
name: spring-cloud-gateway
cloud:
gateway:
routes:
#路由标识
- id: route-service
uri: http://127.0.0.1:10090
order: 0
predicates:
#匹配127.0.0.1:10290/provider?mode=test
- Path=/provider
- Query=mode, test #参数在转发的过程中不会丢失
filters:
#127.0.0.1:10090/query/getServiceName?mode=test
- RewritePath=/provider, /query/getServiceName
完成上述配置后,我们启动服务来进行验证:

没有问题!
参考资料:
https://blog.csdn.net/qq_38380025/article/details/102968559
https://www.cnblogs.com/crazymakercircle/p/11704077.html
https://blog.csdn.net/weixin_41357182/article/details/100140772
Spring Cloud Gateway 学习+实践的更多相关文章
- Spring Cloud Zuul 学习+实践
首先有必要了解一下什么是Zuul,它和Spring Cloud有什么关系. Zuul在Spring Cloud中承担着网关的职责,可以理解为客户端和服务端交互中的唯一通道.所有的客户端请求都会首先发送 ...
- 快速突击 Spring Cloud Gateway
认识 Spring Cloud Gateway Spring Cloud Gateway 是一款基于 Spring 5,Project Reactor 以及 Spring Boot 2 构建的 API ...
- Spring Cloud Alibaba学习笔记(15) - 整合Spring Cloud Gateway
Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它 ...
- Nacos整合Spring Cloud Gateway实践
Spring Cloud Gateway官网:http://spring.io/projects/spring-cloud-gateway Eureka1.0的问题和Nacos对比:https://w ...
- Spring Cloud Alibaba学习笔记(21) - Spring Cloud Gateway 自定义全局过滤器
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的全局过滤器,本文介绍如何自定义全局过滤器. 自定义全局过滤需要实现GlobalFilter 接口,该接口和 GatewayFi ...
- Spring Cloud Alibaba学习笔记(20) - Spring Cloud Gateway 内置的全局过滤器
参考:https://cloud.spring.io/spring-cloud-static/Greenwich.SR2/single/spring-cloud.html#_global_filter ...
- Spring Cloud Alibaba学习笔记(19) - Spring Cloud Gateway 自定义过滤器工厂
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的内置过滤器工厂,若Spring Cloud Gateway内置的过滤器工厂无法满足我们的业务需求,那么此时就需要自定义自己的过 ...
- Spring Cloud Alibaba学习笔记(18) - Spring Cloud Gateway 内置的过滤器工厂
参考:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.1.0.RELEASE/single/spring-clou ...
- Spring Cloud Alibaba学习笔记(17) - Spring Cloud Gateway 自定义路由谓词工厂
在前文中,我们介绍了Spring Cloud Gateway内置了一系列的路由谓词工厂,但是如果这些内置的路由谓词工厂不能满足业务需求的话,我们可以自定义路由谓词工厂来实现特定的需求. 例如有某个服务 ...
随机推荐
- TCP可靠传输
1. TCP 可靠性如何保证? 信道可靠:用三次握手.四次挥手保证连接正确: 数据正确:分区编号.校验和.超时重传: 传输控制:流量控制.拥塞控制 2. 重传机制 TCP可靠传输方式是序列号与确认应答 ...
- Java-Stream流方法学习及总结
1 前言 Stream是一个来自数据源的元素队列并支持聚合操作,其中具有以下特性: Stream只负责计算,不存储任何元素,元素是特定类型的对象,形成一个队列 数据源可以实集合.数组.I/O chan ...
- Greenplum数仓监控解决方案(开源版本)
Greenplum监控解决方案 基于Prometheus+Grafana+greenplum_exporter+node_exporter实现 关联图 一.基本概念 1.Prometheus Pr ...
- 从安装到使用——Odoo常见问题及故障处理
小九今天分享了Odoo一键部署.高效安装的图文详解,接下来,针对Odoo使用过程中的一些问题,小九整理了详细的常见问题问答.这样的直观方式往往能快速高效地解决一些疑惑. 也欢迎提出其他问题,共同探讨, ...
- LNMP 方式部署 zabbix 5.0
文章链接 Zabbix 5.0 LTS新增功能 新版本附带了可用性,安全性和完整性方面的重大改进列表.Zabbix团队遵循的主要策略是使Zabbix尽可能可用.Zabbix是一种开源,免费的监视解决方 ...
- NOIP 模拟 7 寿司
题解 题目 这道题考试的时候直接打暴力,结果暴力连样例都过不了,最后放上去一个玄学东西,骗了 \(5pts\). 正解: 此题中我们可以看到原序列是一个环,所以我们要把它拆成一条链,那么我们需要暴力枚 ...
- 【编程语言】Matlab 学习记录
title: Matlab Learning Record date: 2020-05-23 20:11:26 author: liudongdong1 img: https://gitee.com/ ...
- 【微服务技术专题】Netflix动态化配置服务-微服务配置组件变色龙Archaius
前提介绍 如果要设计开发一套微服务基础架构,参数化配置是一个非常重要的点,而Netflix也开源了一个叫变色龙Archaius的配置中心客户端,而且Archaius可以说是比其他客户端具备更多生产级特 ...
- ANSI C说明了三个用于存储空间动态分配的函数
1.1 malloc的全称是memory allocation,中文叫动态内存分配.原型:extern void *malloc(unsigned int num_bytes);说明:分配长度为num ...
- SpringBoot2.0 防止XSS攻击
一:什么是XSS XSS攻击全称跨站脚本攻击,是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中. 你可以自己做个简单尝试: 1. 在任何一个表单内,你输 ...