大白话实战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,作为全球流行的社交媒体平台,其账户安全更是不容忽视。两步验证作为一种增强账户安全性的措施,虽…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...