大白话实战Gateway
网关功能
网关在分布式系统中起了什么作用?参考下图:

前端想要访问业务访问,就需要知道各个访问的地址,而业务集群服务有很多,前端需要记录非常多的服务器地址,这种情况下,我们需要对整个业务集群做一个整体屏蔽,这个时候就引入Gateway网关,它就是所有服务的请求入口。以后前端不需要记住每个微服务的地址,只需要记住网关的地址,它把请求发给网关,由网关来判断这个请求发给哪个服务,从而完成请求路由。
而网关如何实现把订单的需求转给订单服务而不是其他服务呢?依然要依赖服务注册/发现流程。所有的服务启动后,会注册到注册中心,这样网关就可以从注册中心中获取到所有微服务所在的地址,网关可以根据前端发送请求的路径可以判断该请求发给哪个服务,比如请求以order开头的就转给订单服务,这个时候,网关就可以从注册中心找到所有订单服务的机器列表端口号和访问地址。接下来随便挑个地址,把请求转发。挑选地址的时候,可以融入负载均衡算法,这个就是网关存在的意义。所以网关的功能如下:

- 统一入口
以后所有流量的统一入口都可以经过网关。
- 请求路由
交给网关的请求,网关会自动判断该交给哪个服务。
- 负载均衡
在路由的时候,网关可以融入负载均衡算法,均衡集群中每个服务器的负载量。
- 流量控制
sentinel可以控制每个服务的QPS,它还能融入网关,由于网关是统一入口,一旦和网关整合后,可以在入口处,对全局的QPS进行统一限流。
- 身份认证
比如请求过来后,网关发现是未登录的用户,而访问的资源必须登录,那就可以把这个请求挡回,让重新登录。或者有些是非法攻击请求,也可以拦截。
- 协议转换
比如前端发的请求带的是json数据,但后端微服务直接远程调用需要GRPC协议,网关就可以把json数据转为GRPC通用的数据模型,再往下转发。
- 系统监控
由于所有的入口都在网关,那就可以监控每个请求,从收到到结束处理了多长时间,来统计全局的慢请求,统计当天的访问总量等等各种监控数据。
- 安全防护
从网关层,我们可以配置防止跨站脚本攻击,SQL注入等常见的安全问题。
而我们接下来学的是Spring Cloud Gateway:

Spring Cloud Gateway有两个版本,一个是Reactive Server,是基于响应式生产的网关,它可以占用少量资源就能实现高并发,Server MVC是个传统的网关,用的是之前Serverlet那一套,现在都推荐使用响应式编程的网关。使用的时候两个的区别就是导入不同的starter。
接下来我们通过一个例子来熟悉网关的用法。

创建网关
来到项目中,由于网关不属于业务,它属于架构组件的一部分,所以推荐直接创建在cloud-demo下面,新创建个module。

在网关模块的pom文件中配置:
根据网关的原理,要做路由转发,需要用到路由中心,所以也引入nacos,配置中心可以暂时不需要,还要引入负载均衡。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
接下来直接启动这个项目,它就是个网关了,即创建一个网关启动类:

每个项目都脱离不了它的配置文件,我们创建一个application.yml,并配置名称和nacos:
spring:application:name: gatewaycloud:nacos:discovery:server-addr: 127.0.0.1:8848
# 写上80端口,以后访问就不用加端口了
server:port: 80
我们来启动这个项目,然后去nacos服务列表查看:

我们访问网关如果能看到这个错误页面说明网关启动成功了:

路由-规则配置

创建好了网关,解析来在网关里面配置路由规则,让以/api/order/开头的所有请求交给订单服务,/api/product/开头的所有请求交给商品服务,这个怎么做呢?Spring cloud提供了两种方式,第一种在配置文件里面配置路由规则,第二种是使用编码的方式编写路由规则。
我们先来测试第一种,用配置文件,为了方便起见,我们新建一个application-route.yml配置文件:
spring:cloud:gateway:routes:- id: order-routeuri: lb://service-orderpredicates:- Path=/api/order/**- id: product-routeuri: lb://service-productpredicates:- Path=/api/product/**
说明:
uri: lb://service-order:lb是负载均衡的意思,即负载均衡访问订单服务
- Path=/api/order/**:访问以/api/order开头的网址
接下来需要给所有微服务的请求都加上前缀:
订单请求:

商品请求:

还有所有的远程调用也要加前缀(注意,OpenFeign客户端不能用@RequestMapping注解):

重启订单和商品服务进行测试:

我们再启动一个订单服务,测试一下负载均衡:

请求两次,发现每个服务各打印了一次日志,说明负载均衡也没有问题:


路由-工作原理
通过路由配置,我们很容易的就知道网关的工作原理,如下图:

当请求进来后优先交给网关,网关里面会配置非常多的路由规则,每个路由规则重要的几项有:
- id
全局唯一不重复,
- uri
就是我们要去的目的地
- predicate
最终这个请求一定要交给指定的目的地,但是什么情况下才转给这个目的地,我们需要配置一个断言规则,规则可以有很多,因为它是一个数组的方式,如果多个的话,那就必须同时成立才可以,满足这个规则,就会把请求转给目的地。
- filter
转的过程中还可以进行一系列的filter过滤器。
所有可配置的参数如源码的变量:

我们主要就是看有多少断言规则,目前我们只是根据路径进行往下转,再就是看每次转的时候如何使用过滤器,做一些前置和后置的逻辑,另外需要注意,这些规则是有序的,如果第一个匹配上了,就不会匹配第二个了,比如第一个是订单,匹配上后,就不会往下匹配了。
此时我们可以配置order,越小优先级越高。
断言-长短写法
前面我们说了网关的三个核心:路由、断言和过滤器。

接下来我们看一下断言,常用的断言就是Path,看请求路径有没有满足某种规则,而断言功能是有路由断言工厂提供的,官网的路由断言工厂中列举了到底有多少种断言机制,用法都一样,我们测试一个,通过文档再看其他的就可以了。在测试之前,说一下它们的写法,在SpringCloud里面有两种写法,一种叫短写法,另一种叫全写法。区别如下图:

短写法就是断言的名,比如Path,等于一个值。而全写法,需要配置name是什么,这里是由于要用路径断言,所以写Path,参数args是什么,指的就是那些值。我们点开predicates源码就可以看到每个断言有两个参数:

name为什么可以配置为Path呢?实际上在底层对应的是:

这个断言的名字,完全取决于当时类在命名的时候,断言工厂RoutePredicateFactory前面的字符串是什么,这里我们要选择路径,字符串就是Path,而args参数取决于断言里面有个Config配置:

配置中有两个:

所以我们args参数第一个是partterns,即规则,第二个是matchTrailingSlash,默认是true。

设置为true,那么/red/1和/red/1/是一个路径,也就是后面加不加/都可以,否则就是不同路径了。
我们现在把订单改成了全写法后重启服务看看是否正常:

这里记住一点&#
相关文章:
大白话实战Gateway
网关功能 网关在分布式系统中起了什么作用?参考下图: 前端想要访问业务访问,就需要知道各个访问的地址,而业务集群服务有很多,前端需要记录非常多的服务器地址,这种情况下,我们需要对整个业务集群做一个整体屏蔽,这个时候就引入Gateway网关,它就是所有服务的请求入…...
深入学习解析:183页可编辑PPT华为市场营销MPR+LTC流程规划方案
华为终端正面临销售模式转型的关键时刻,旨在通过构建MPRLTC项目,以规避对运营商定制的过度依赖,并探索新的增长路径。项目核心在于建设一套全新的销售流程与IT系统,支撑双品牌及自有品牌的战略发展。 项目总体方案聚焦于四大关键议…...
【微中子代理踩坑-前端node-sass安装失败】
微中子代理踩坑-前端node-sass安装失败-windows 1.npm版本2.python2.73.安装Visual Studio 1.npm版本 当前使用node版本13.12.0 2.python2.7 安装python2.7.9并配置环境变量 3.安装Visual Studio 安装Visual Studio 我是直接勾选了3个windows的sdk,然后就好了 最后 npm in…...
使用open-webui+deepseek构建本地AI知识库
序 本文主要研究一下如何使用OpenWebUIdeepseek构建本地AI知识库 步骤 拉取open-webui镜像 docker pull ghcr.io/open-webui/open-webui:maindocker启动 docker run -d -p 3000:8080 \ -e OLLAMA_BASE_URLhttp://host.docker.internal:11434 \ ghcr.io/open-webui/open-we…...
CSS盒模
CSS盒模型就像一个快递包裹,网页上的每个元素都可以看成是这样一个包裹,它主要由以下几个部分组成: 内容(content):就像包裹里真正装的东西,比如文字、图片等。在CSS里,可用width&a…...
【开源向量数据库】Milvus简介
Milvus 是一个开源、高性能、可扩展的向量数据库,专门用于存储和检索高维向量数据。它支持近似最近邻搜索(ANN),适用于图像检索、自然语言处理(NLP)、推荐系统、异常检测等 AI 应用场景。 官网:…...
机器学习笔记——常用损失函数
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本笔记介绍机器学习中常见的损失函数和代价函数,各函数的使用场景。 热门专栏 机器学习 机器学习笔记合集 深度学习 深度学习笔记合集 文章目录 热门…...
Nginx--日志(介绍、配置、日志轮转)
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、Nginx日志介绍 nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的…...
2025 vue3面试题汇总,通俗易懂
一、基础概念与核心特性 1. Vue3 相比 Vue2 的改进(通俗版) 问题:Vue3 比 Vue2 好在哪? 答案: 更快: Proxy 代理:Vue2 的响应式像“逐个监听保险箱”(每个属性单独监听࿰…...
一周学会Flask3 Python Web开发-Debug模式开启
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 默认情况,项目开发是普通模式,也就是你修改了代码,必须重启项目,新代码才生效&…...
聚焦于机器人研究,提出 FuSe 方法,通过语言锚定对通用机器人策略进行微调 视觉、触觉、听觉
聚焦于机器人研究,提出 FuSe 方法,通过语言锚定对通用机器人策略进行微调,利用多模态传感器提升性能,在多种任务中表现优异,具备跨模态推理能力。 研究背景:与世界交互需多感官协作,当前先进通用机器人策略多依赖视觉和本体感受数据训练,忽略其他模态信息。方法:FuSe …...
C++ 无锁队列:原理与实现
引言 在多线程编程中,队列是一种常用的数据结构。传统的队列在多线程环境下访问时,通常需要使用锁机制来保证数据的一致性和线程安全。然而,锁的使用会带来性能开销,尤其是在高并发场景下,频繁的加锁和解锁操作可能成…...
web的分离不分离:前后端分离与不分离全面分析
让我们一起走向未来 🎓作者简介:全栈领域优质创作者 🌐个人主页:百锦再新空间代码工作室 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[1504566…...
MobileSal:极其高效的RGB-D显著性物体检测模型
摘要 问题一:什么叫做MobileSal? MobileSal 是指一种用于移动设备上的显著性检测(Saliency Detection)方法,通常是针对在资源受限的环境(如智能手机)上运行的视觉模型。 问题二:什…...
【个人总结】1. 开发基础 工作三年的嵌入式常见知识点梳理及开发技术要点(欢迎指正、补充)
【个人总结】1. 开发基础 工作三年的嵌入式常见知识点梳理及开发技术要点(欢迎指正、补充) 工作快三年以来 分别进行了嵌入式MCU及外设开发、RTOS、传感器、文件系统及USB、Linux、GUI、通讯协议、毫米波雷达、少量的DSP和物联网开发。 特此总结&#x…...
硬核技术组合!用 DeepSeek R1、Ollama、Docker、RAGFlow 打造专属本地知识库
文章目录 一、引言二、安装Ollama部署DeepSeekR1三、安装Docker四、安装使用RAGFlow4.1 系统架构4.2 部署流程4.3 使用RAGFlow4.4 在RAGFlow中新增模型4.5 创建知识库4.6 创建私人助理使用RGA 一、引言 本地部署DeepSeek R1 Ollama RAGFlow构建个人知识库,通过将…...
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
1.打开MySQL的官网,选择下载(Download) MySQL[这里是图片001]https://www.mysql.com/cn/ 2.往下划点击MySQL Community(GPL)Downloads 3.要下载MySQL的jar包的选择Connector/J 4.进入后,根据自己的需求选择相应的版本 5.下载完成后,进行解压…...
idea 2019.3常用插件
idea 2019.3常用插件 文档 idea 2019.3常用插件idea 2023.3.7常用插件 idea 2019.3常用插件 插件名称插件版本说明1AceJump3.5.9AceJump允许您快速将插入符号导航到编辑器中可见的任何位置。只需按“ctrl;”,键入一个字符,然后在Ace Jump…...
对CSS了解哪些?
CSS(Cascading Style Sheets,层叠样式表)是用来描述HTML文档外观和布局的语言。以下是对CSS的常见了解范围: 1. CSS 基础 选择器:如通用选择器 (*)、类型选择器、类选择器 (.class)、ID选择器 (#id)、后代选择器、伪类…...
TikTok账户安全指南:如何取消两步验证?
TikTok账户安全指南:如何取消两步验证? 在这个数字化的时代,保护我们的在线账户安全变得尤为重要。TikTok,作为全球流行的社交媒体平台,其账户安全更是不容忽视。两步验证作为一种增强账户安全性的措施,虽…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
