【Java EE】Spring Cloud Gateway

news2024/12/27 12:19:02

Spring Cloud Gateway

  • 添加Spring Cloud Gateway
  • 术语表
  • 工作流程
  • 网关的作用
    • 路由
    • 负载均衡
    • 统一处理跨域
    • 发布控制
    • 流量染色
    • 统一接口保护
    • 统一业务处理
    • 统一鉴权
    • 访问控制
    • 统一日志
    • 统一文档
  • 网关的分类
  • 实现网关
  • 开启日志
  • 断言
  • 过滤器

参考文档 https://springdoc.cn/spring-cloud-gateway/

添加Spring Cloud Gateway

使用 group ID 为 org.springframework.cloud,artifact ID 为 spring-cloud-starter-gateway 的starter

 <dependency>    
 <groupId>org.springframework.cloud</groupId>  
   <artifactId> spring-cloud-starter-gateway</artifactId>
   </dependency>

术语表

  • Route(路由): 网关的基本构件。它由一个ID、一个目的地URI、一个谓词(Predicate)集合和一个过滤器(Filter)集合定义。如果集合谓词为真,则路由被匹配。
  • Predicate(谓词): 这是一个 Java 8 Function Predicate。输入类型是 Spring Framework ServerWebExchange。这让你可以在HTTP请求中的任何内容上进行匹配,比如header或查询参数。
  • Filter(过滤器): 这些是 GatewayFilter 的实例,已经用特定工厂构建。在这里,你可以在发送下游请求之前或之后修改请求和响应。

简而言之:
路由(根据什么条件,转发到哪里去)

断言:一组规则、条件, 用来确定如何转发路由

过滤器: 对请求进行一系列的处理, 比如添加请求头、添加请求参数

工作流程

客户端向 Spring Cloud Gateway 发出请求。如果Gateway处理程序映射确定一个请求与路由相匹配,它将被发送到Gateway Web处理程序。这个处理程序通过一个特定于该请求的过滤器链来运行该请求。过滤器被虚线分割的原因是,过滤器可以在代理请求发送之前和之后运行逻辑。所有的 “pre” (前)过滤器逻辑都被执行。然后发出代理请求。在代理请求发出后,“post” (后)过滤器逻辑被运行。

请求流程:

  1. 客户端发起请求
  2. Handler Mapping: 根据断言,将请求转发到对应的路由
  3. Web Handler: 处理请求(一层层经过过滤器)
  4. 实际调用服务

在这里插入图片描述

网关的作用

  1. 路由
  2. 负载均衡
  3. 统一鉴权
  4. 跨域
  5. 统一业务处理(缓存)
  6. 访问控制
  7. 发布控制
  8. 流量染色
  9. 接口保护
    1. 限制请求
    2. 信息脱敏
    3. 降级(熔断)
    4. 限流:学习令牌桶算法、学习漏桶算法,学习一下 RedisLimitHandler
    5. 超时时间
  10. 统一日志
  11. 统一文档

路由

起到转发的作用,比如有接口 A 和接口 B, 网关会记录这些信息,根据用户访问的地址和参数,转发请求到对应的接口(服务器/集群)

/a => 接口 A

/b => 接口 B

Gateway 路由:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories

负载均衡

在路由的基础上

/c => 服务 A / 集群 A (随机转发到其中的某一个机器)

uri 从固定地址改成 lb:xxxx

统一处理跨域

网关统一处理跨域,不用在每个项目里单独处理

GateWay 处理跨域:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#cors-configuration

发布控制

灰度发布,比如上线新接口,先给新接口分配 20% 的流量,老接口 80%, 再慢慢调整比例

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-weight-route-predicate-factory

流量染色

给请求(流量)添加一些标识,一般是设置请求头中,添加新的请求头

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-addrequestheader-gatewayfilter-factory

全局染色:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#default-filters

统一接口保护

  1. 限制请求:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#requestheadersize-gatewayfilter-factory
  2. 信息脱敏:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-removerequestheader-gatewayfilter-factory
  3. 降级(熔断):https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#fallback-headers
  4. 限流:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-requestratelimiter-gatewayfilter-factory
  5. 超时时间:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#http-timeouts-configuration
  6. 重试(业务保护):https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-retry-gatewayfilter-factory

统一业务处理

把每个项目中都要做的通用逻辑放到上层(网关),统一处理,比如本项目的次数统计

统一鉴权

判断用户是否有权限进行操作,无论访问什么接口,都统一验证权限,避免重复写验证权限操作。

访问控制

黑白名单,比如限制 DDOS IP

统一日志

统一的请求、响应信息记录

统一文档

将下游项目的文档进行聚合,在一个页面统一查看

可以使用 knife4j : https://doc.xiaominfo.com/docs/middleware-sources/aggregation-introduction

网关的分类

  1. 全局网关(接入层网关): 作用是负载均衡、请求日志等,不和业务逻辑绑定
  2. 业务网关(微服务网关): 存在一些业务逻辑,作用是将请求转发到不同的业务/项目/接口/服务

参考文章:https://blog.csdn.net/qq_21040559/article/details/122961395

实现网关

  1. Nginx (全局网关)、Kong 网关 (API 网关, Kong: https://github.com/Kong/kong), 编程成本相对高点
  2. Spring Cloud GateWay (取代了 Zuul ) , 性能高、可以用 Java 代码来写逻辑,适合学习

网关的技术选型:https://zhuanlan.zhihu.com/p/500587132

开启日志

logging:
  level:
    org:
      springframework:
        cloud:
          gateway: trace

断言

  1. After 在 xx 时间之后
  2. Before 在 xx 时间之前
  3. Between 在 xx 时间之间
  4. 请求类别
  5. 请求头(包含 cookie)
  6. 查询参数
  7. 客户端地址
  8. 权重

过滤器

基本功能:对请求头、请求参数、响应头的增删改查

  1. 添加请求头
  2. 添加请求参数
  3. 添加响应头
  4. 降级
  5. 限流
  6. 重试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/553387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BetaFlight Mark4之“妖怪”声音之二

BetaFlight Mark4之“妖怪”声音之二 1. 源由2. 回顾3. 分析4. 优化5. 数据6. 综述7. 参考资料8. 附录 1. 源由 在BetaFlight Mark4之“妖怪”声音大致做了如下测试: 滤波参数调整 (怀疑滤波参数问题&#xff0c;导致振动传入系统&#xff0c;进而桨叶转速变化产生异响)整机螺…

系统学习大模型的20篇论文

【引子】“脚踏实地&#xff0c;仰望星空”&#xff0c; 知其然还要知其所以然。读论文是一条重要的途径&#xff0c;这一篇文章https://magazine.sebastianraschka.com/p/understanding-large-language-models非常值得借鉴&#xff0c;不敢私藏&#xff0c;编译成文。 大型语言…

Vue-生命周期

Vue实例有一个完整的生命周期&#xff0c;也就是说从开始创建、初始化数据、编译模板、挂在DOM、渲染-更新-渲染、卸载等一系列过程&#xff0c;我们成为Vue 实例的生命周期&#xff0c;钩子就是在某个阶段给你一个做某些处理的机会。 注册周期钩子​ 举例来说&#xff0c;mo…

聚观早报 | ChatGPT登顶美区iOS免费榜;库克不满苹果首款MR设备

今日要闻&#xff1a;ChatGPT登顶美区iOS免费榜&#xff1b;库克不满苹果首款MR设备&#xff1b;索尼正开发小尺寸折叠屏手机&#xff1b;万达辟谣大规模裁员&#xff1b;智能仿生手让截肢者重获手心的温度 ChatGPT登顶美区iOS免费榜 ChatGPT 在 iOS 美区免费 App 排行榜上位列…

一种轻量级的消息传输协议-MQTT

正文 大家周末好&#xff0c;我是bug菌&#xff5e; 最近项目中用到了MQTT&#xff0c;感觉挺优秀的一种协议&#xff0c;所以这里分享一些相关的知识。 1 什么是MQTT MQTT是一种轻量级的消息传输协议&#xff0c;用于物联网设备和应用程序之间的通信。其最初由IBM开发&#xf…

TCP可靠数据传输

TCP 是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的。 1 重传机制 TCP 利用重传机制解决数据包丢失的情况&#xff0c;常见的重传机制如下&#xff1a; 超时重传快速重传SACKD-SACK 1.1 超时重传 重传机制的其中一个方式&#xff0c;就是…

网络的七层模型

网络的七层模型 七层模型结构 OSI七层模型TCP/IP五层模型说明协议硬件解释应用层应用层网络服务与最终用户的一个接口HTTP HTTPS FTP TFTP SMTP POP3 IMAP TELNET SNMP DHCP这层不涉及硬件&#xff0c;主要是web应用的表形式为应用程序提供网络服务表示层数据的表示、安全、压…

[学习笔记] [机器学习] 6. [下]决策树算法(熵Entropy、信息增益(率)、基尼值(指数)、CART剪枝、特征工程特征提取、回归决策树)

7. 回归决策树 学习目标&#xff1a; 知道回归决策树的实现原理 前面已经讲到&#xff0c;关于数据类型&#xff0c;我们主要可以把其分为两类&#xff0c;①连续型数据和②离散型数据。 在面对不同数据时&#xff0c;决策树也可以分为两大类型&#xff1a; 分类决策树&…

第三篇:强化学习发展历史

你好&#xff0c;我是zhenguo&#xff08;郭震&#xff09; 这是强化学习第三篇&#xff0c;我们回顾一下它的发展历史&#xff1a;强化学习发展历史 强化学习作为一门研究领域&#xff0c;经历了多年的发展和演进。以下是强化学习的主要发展历史里程碑&#xff1a; 1950年代-1…

前沿重器[33] | 试了试简单的prompt

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

容器简单介绍

目录 一、容器简介​编辑 二、容器和虚拟化技术差异 三、容器基本概念 四、容器技术对企业优势 五、容器的工具 一、容器简介 docker只是容器工具&#xff0c;真正容器技术是LXC &#xff08;linux container&#xff09; 二、容器和虚拟化技术差异 虚拟机模式&#xff…

微服务开发系列 第二篇:Nacos

总概 A、技术栈 开发语言&#xff1a;Java 1.8数据库&#xff1a;MySQL、Redis、MongoDB、Elasticsearch微服务框架&#xff1a;Spring Cloud Alibaba微服务网关&#xff1a;Spring Cloud Gateway服务注册和配置中心&#xff1a;Nacos分布式事务&#xff1a;Seata链路追踪框架…

【腾讯云 Finops Crane 集训营】云架构成本大,浪费支出太高?何不试试Crane

一、前言 近年来&#xff0c;很多公司随着业务的发展都开始采用云原生的架构方式来部署服务系统&#xff0c;以便满足系统的弹性需求。但随着业务的进一步增长&#xff0c;k8s的节点数不断的增加&#xff0c;每个月消耗的费用也随之增加&#xff0c;导致了资源的利用率并不平均…

Python自动化办公对每个子文件夹的Excel表加个表头(Excel同名)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 玉容寂寞泪阑干&#xff0c;梨花一枝春带雨。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python粉丝【彩】问了一个Python自动化办公处理的问题&…

python整合合并两个excel文件,保留各自excel文件的样式,包含字体大小和字体颜色等格式

一、实现目标 现有两个excel文件data1.xlsx和data2.xlsx,要求将这两个excel文件合并为一个excel文件,同时保留这两个excel文件各自带有的样式,包括字体、颜色等格式需要保留。 data1.xlsx: …

装饰者设计模式解读

问题引进 星巴克咖啡订单项目&#xff08;咖啡馆&#xff09;&#xff1a; 1) 咖啡种类/单品咖啡&#xff1a;Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 2) 调料&#xff1a;Milk、Soy(豆浆)、Chocolate 3) 要求在扩展新的咖啡种类时&#x…

Redis主从集群搭建及其原理

Redis主从集群搭建及其原理 1.Redis主从1.1.搭建主从架构1.2.准备实例和配置1.3.启动1.4.开启主从关系1.5.测试 2.主从数据同步原理2.1.全量同步2.2.增量同步2.3.repl_backlog原理 3.主从同步优化4.小结 1.Redis主从 1.1.搭建主从架构 单节点Redis的并发能力是有上限的&#…

车辆合格证怎么转为结构化excel数据?

一、为何要将车辆合格证转为结构化excel&#xff1f; 车辆合格证是在车辆制造完成后&#xff0c;经过各项检测合格的证明。对于车辆行业来说&#xff0c;车辆合格证是一种重要的合规证明&#xff0c;在车辆的生产制造、售后服务、质量管理等各个环节中都有着重要的作用。同时&…

【架构】常见技术点--监控告警

导读&#xff1a;收集常见架构技术点&#xff0c;作为项目经理了解这些知识点以及解决具体场景是很有必要的。技术要服务业务&#xff0c;技术跟业务具体结合才能发挥技术的价值。 目录 1. 服务监控 2. 全链路监控 2.1 服务拨测 2.2 节点探测 2.3 告警过滤 2.4 告警去重 …

内网 monorepo 配置指南(PNPM、YARN、Rush.js)

此处的内网是指没办法连接互联网进行依赖下载的环境&#xff0c;本文以windows平台为例 背景说明 绝大部分政府机关、国有企业都是在内网开发&#xff0c;无法从互联网同步依赖&#xff0c;就需要另辟蹊径解决项目依赖的问题。 传统的单包项目还好&#xff0c;从互联网机器将…