大白话实战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,作为全球流行的社交媒体平台,其账户安全更是不容忽视。两步验证作为一种增强账户安全性的措施,虽…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
DAY 45 超大力王爱学Python
来自超大力王的友情提示:在用tensordoard的时候一定一定要用绝对位置,例如:tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾: tensorboard的发展历史和原理tens…...
开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例
在工业自动化控制系统中,常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中,客户现场采用了 罗克韦尔PLC,但需要控制的变频器仅支持 ModbusRTU 协议。为了实现PLC 对变频器的有效控制与监控,引入了开疆智能Etherne…...
