什么是Spring Cloud Gateway

Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供简单、有效且统一的API路由管理方式,如下图所示。

Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。

Spring Cloud Gateway 的核心概念

网关提供 API 全托管服务,丰富的 API 管理功能,辅助企业管理大规模的 API ,以降低管理成本和安全风险,包括协议配置、协议转发、安全策略(WAF)、防刷、流量、监控日志等功能。一般来说,网关对外暴露的URL或者接口信息,我们统称为路由信息。如果研发过网关中间件,或者使用或了解过 Zuul 的人,会知道网关的核心肯定是 Filter 以及 Filter Chain(Filter责任链)。Spring Cloud Gateway 也具有路由和 Filter 的概念。下面介绍一下 Spring Cloud Gateway 中最重要的几个概念。

  • 路由(route) 。路由是网关最基础的部分,路由信息由一个ID、一个目的url、一组断言工厂和一组 Filter 组成。如果路由断言为真,则说明请求的 url 和配置的路由匹配。
  • 断言(Predicate)。Java8中的断言函数。Spring Cloud Gateway中的断言函数输入类型是 Spring5.0 框架中的 ServerWebExchange。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配来自于Http Request中的任何信息,比如请求头和参数等。
  • 过滤器(filter)。一个标准的 Spring webFilter。Spring Cloud Gateway中的Filter分为两种类型的 Filter,分别是 Gateway Filter 和 Global Filter。过滤器Filter 将会对请求和响应进行修改处理。

Spring Cloud Gateway 的工作原理

Spring Cloud Gateway 的核心处理流程如图:

Gateway的客户端会向 Spring Cloud Gateway 发起请求,请求首先会被 HttpWebHandlerAdaper 进行提取组装成网关的上下文,然后网关的上下文会传递到 DispacherHandler。DispacherHandler 是所有请求的分发处理器,DispacherHandler 主要负责分发请求对应的处理器,比如将请求分发到对应 RoutePredicate-HandlerMapping (路由断言处理映射器)。路由断言处理映射器主要用于路由的查找,以及找到路由后返回对应的 FilteringWebHandler 。FilteringWebHandler 主要负责组装 Filter 链表并调用 Filter 执行一系列的 Filter 处理,然后把请求转到后端对应的代理服务处理,处理完毕后,将 Response 返回到 Gateway 客户端。

在 Filter 链中,通过虚线分割 Filter 的原因是,过滤器可以在转发请求之前处理或者接收到被代理服务的返回结果之后处理。所有的 Pre 类型的 Filter 执行完毕之后,才会转发请求到被代理的服务处理。被代理的服务把所有请求处理完毕之后,才会执行 Post 类型的过滤器。

注意:在配置路由的时候,如果不指定端口的话,http默认设置端口为80,https默认设置端口为443。Spring Cloud Gateway 的启动容器目前只支持 Netty。

Spring Cloud Gateway 概述 《重新定义Spring Cloud实战》读书笔记相关推荐

  1. Spring4实战读书笔记

    Spring4实战读书笔记 首先,我们需要明白,为什么我们需要引入Spring,也就是说Spring的好处.个人觉得主要是在于两方面解耦和对bean的管理. 第一部分:Spring核心 共分为四个章节 ...

  2. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类 1.教育工具 2.生活工具 3.社交应用 4.定位工具 5.游戏 6.报纸和杂志的阅读器 7.移动办公应用 8.财经工具 9.手机购物应用 10.风景区相关 ...

  3. Go语言实战读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> Go语言实战读书笔记 第二章 通道(channel).映射(map)和切片(slice)是引用类型.引用类型的对象需要使用ma ...

  4. 机器学习实战---读书笔记: 第11章 使用Apriori算法进行关联分析---2---从频繁项集中挖掘关联规则

    #!/usr/bin/env python # encoding: utf-8''' <<机器学习实战>> 读书笔记 第11章 使用Apriori算法进行关联分析---从频繁项 ...

  5. Apache Kafka实战读书笔记(推荐指数:☆☆☆☆☆)

    Apache Kafka实战读书笔记(推荐指数:☆☆☆☆☆) 认识AK 快速入门 安装和启动 小案例 消息引擎系统 消息引擎范型 AK的概要设计 吞吐量/延时 消息持久化 负载均衡和故障转移: 伸缩性 ...

  6. spring框架的概述以及spring中基于XML的IOC配置——概念

    1.spring的概述     spring是什么     spring的两大核心     spring的发展历程和优势     spring体系结构 2.程序的耦合及解耦     曾经案例中问题   ...

  7. spring boot 503_Spring实战读书笔记第4章 面向切面的Spring

    本章内容: 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 在软件开发中,散布于应用中多的功能被称为横切关注点(cross-cutting con ...

  8. 老男孩shell实战读书笔记 (6-10章节)

    老男孩shell教程 (6-10章节) shell脚本的条件测试与比较 在bash编程中,条件测试常用的语法形式如下表: 说明⚠️: 语法1中的test命令和语法2中的[]是等价的. 语法3中的[[] ...

  9. 《Spring Cloud 与 Docker 微服务架构实战》笔记

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. PS:springcloud系列文章见:springcloud 系列,一看就会 . 在此,只是记录细 ...

最新文章

  1. html离开页面时,js实现用户离开页面前提示是否离开此页面的方法(包括浏
  2. eci转换ci公式_原文提供的置信区间不是95%,如何转换?
  3. android 关机充电流程
  4. JavaScript-使用WeakMap创建对象的私有属性
  5. 如何在windows本地用命令行访问SAP kyma实例
  6. mysql中出现没有权限访问或者查看全部数据库的问题---用客户端第一次打开的时候...
  7. LeetCode 100. 相同的树(二叉树遍历)
  8. 工作总结!日志打印的15个建议
  9. 寒假第七周 2.22 --- 2.28
  10. python自动化,自动登录并且添加一个门店
  11. flatpak安装的firefox视频播放卡顿的解决方案
  12. 如何对计算机进行硬盘的分区,使用分区助手如何对磁盘进行快速分区?
  13. idea-插件开发 Dialogs
  14. 大数据营销咨询公司AIO获数百万美元天使轮融资
  15. Python爬虫教程(一):基础知识
  16. 运动世界校园【夜神模拟器——步频脚本一键导入】
  17. 怎么用python编写程序计算标准差_python 标准差计算的实现(std)
  18. 满江红--大宋提刑官
  19. Java 实现OCR 识别图像文字(手写中文)----tess4j
  20. UltraISO 绿色多国语言版

热门文章

  1. 单片机ADC0832电压检测程序(充电自动提醒)
  2. 数据库第五次作业——查询数据
  3. 数控g71编程实例带图_数控车G71有凹槽复合循环编程实例
  4. 杂事缠身总分神,不妨试试番茄钟
  5. pxelinux_IT怪胎:如何使用PXElinux v5和Wimboot网络引导(PXE)WinPE恢复磁盘
  6. OpenAI Codex,GitHub Copilot 和cheat.sh 三个代码建议工具对比
  7. 我们不靠天,也不靠地,我们靠自己
  8. 手机上的 Google 地图
  9. 网络编程知识预备(2) —— 三次握手与四次挥手、半连接状态、2MSL
  10. 一种基于 dlib 的脸部标记检测器