当前位置: 首页 > news >正文

gateway

gateway核心概念

1. 路由(route)
        路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL 和 配置的路由匹配。
2. 断言(predicates)
     断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等
3.过滤器(Filter)
     Filter分为Gateway FilIer和Global Filter。Filter可以对请求和响应进行处理。


gateway快速开始

1. 引入依赖
注意:会和spring-webmvc的依赖冲突,需要排除spring-webmvc
2.编写yml配置文件
server.port = 8088是 网关的访问端口
spring.application.name 是 当前网关服务的服务名称
gateway.routes下面定义路由规则:
id是这个路由规则的名称,gateway.routes下面可以有很多的路由规则
url:把访问当前网关的这个服务, 转发到哪个url去,首先,我不能什么请求到网关都去转发,需要满足一定的条件,predicates断言,就是起到这个作用
predicates:当 请求到了当前这个网关(那么 这个请求就必须带了当前网关的 ip+端口号 的信息,后面紧跟着 斜杠 / ,所以网关可以默认这些信息是有的, predicates中不用考虑这些信息), 如果 端口号后面的url,以 /order-serv/** 开头,那么 就转发到 上面url的 ip + 端口。 并且斜杠 / 后面的所有路径都不会去掉,那么就转发到了http://localhost:8020/order-serv/order/add 这个地址
(order-serv是服务名称,防止订单服务里有/order/add开头的地址,库存服务里也有/order/add开头的地址,所以 发到gateway的请求,都带上需要转发到的服务的名称),但是 订单服务 里 接收的请求里 是 没有 /order-serv/的,只有发来的请求是 http://localhost:8020/order/add ,才能进行接收, 所以 让网关把 第一层路径给去掉,通过 filters 过滤前缀
如果不满足断言,就会报 404 的 错误 


这里我们在配置里把转发的url地址都写死,当服务器发生迁移,ip地址会变动 或者 服务器是以集群的形式部署的,还需要通过nginx来进行反向代理和负载均衡,很麻烦。

我们通过把gateway和nacos集成起来,就可以轻松解决这些问题

集成Nacos

1. 继续引入nacos的依赖
2. 继续编写yml配置文件
(1)集成nacos,只需将当前的gateway服务,注册到nacos上即可,写上nacos服务地址和账号密码
(2)将路由规则中的,转发到哪个服务的地址,改成服务名称 "order-service" 即可(url: order-service),又因为需要使用nacos自带的ribbon的负载均衡策略,所以前面加上  lb://   , lb的意思是loadbalance负载均衡。
gateway网关会将 “order-service” 整体 替换成 其中一个 订单服务的 ip 地址(因为网关会定时拉取各种nacos上注册上去的服务的ip地址列表)
这样就解决了当服务器发生迁移,ip地址变动 或者 服务器是以集群的形式部署的,还需要通过nginx来进行反向代理和负载均衡的问题
简写路由规则:约定大于配置
(1)开启自动识别nacos服务的功能后,就不需要写断言规则了
(2)将发送到网关的请求  ,以注册到nacos上的服务名称开头时,会自动转发到那个服务的某个服务器上,并自动过滤掉第一层路径(缺点:路由规则不够灵活)
这时候,只要按照网关地址/微服务/接口的格式去访问,就可以得到成功响应。


断言工厂

根据url来进行断言,是gateway内置的断言工厂



自定义路由断言工厂

这里假设自定义一个基于Query请求参数的断言工厂,复制源码里面的内容,然后根据需要进行修改

自定义 一个基于Query请求参数的断言工厂, 需要继承 AbstractRoutePredicateFactory 类,重写 apply 方法的逻辑。在 apply 方法中可以通过 exchange.getRequest() 拿到 ServerHttpRequest 对象,从而可以获取到请求的参数、请求方式、请求头等信息。
1. 必须是spring组件 ,即是一个bean
2. 类必须加上 RoutePredicateFactory 作为结尾
3. 必须继承  AbstractRoutePredicateFactory
4. 必须声明静态内部类,声明属性来接收 配置文件中对应的断言的信息
5. 需要结合 shortcutFieldOrder 进行绑定
6. 通过apply进行逻辑判断 true就是匹配成功 false匹配失败


过滤器(先过滤再路由)

(1)先经过 过滤器 把请求的url地址处理后,或者添加删除修改一些请求头、cookie等的信息,

(2)再通过nacos的服务列表进行路由到 对应的服务器上

过滤器的作用:当一个请求来到gateway网关时,我们可以对这个请求进行一个业务逻辑的处理。

比如:

(1)前面通过 过滤器 去把第一层路径给去掉

(2)可以给来到网关的所有请求添加一个请求头,再设置里面的内容。

(3)可以给来到网关的所有请求设置一个cookie等等处理

具体全部内置的过滤器有哪些可以访问官网

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories

下面是一些代码示例:

测试地址是发送给gateway网关的

通过routes路由到下面的@GetMapping的地址,下面的代码来接收请求和进行响应

例1:

例2
例3
前一个url地址是发送到网关的,经过过滤器,加上了前缀/mall-order。这时,服务端要能接收响应,必须设置,发送来的请求,都带上/mall-order。这样服务器才能进行正常的接收网关路由来的请求
例4
发送到当前网关的请求,都会被路由到百度网站
302是重定向之后的响应状态码


自定义过滤器



全局过滤器

局部过滤器和全局过滤器区别:
局部:局部针对某个路由, 需要在路由中进行配置
全局:针对所有路由请求, 不需要在配置文件中配置, 一旦定义就会投入使用
内置的全局过滤器:
路由地址中带了lb的话,就会自动采用负载均衡策略,和上面第一个的全局过滤器对应
这些全局过滤器 会自动判断,自动处理,不用我们管理


自定义全局过滤器(重点)

记录所有访问过来的请求,保存成日志的形式,可以用自定义全局过滤器

或者判断用户登录、权限方面也可以自定义全局过滤器

自定义全局过滤器非常简单
1. 定义一个类,交给springIOC容器管理,即加上spring的注解 @Compenent
2. 继承GlobalFilter接口,重写里面的filter方法,只需要写里面的方法体就行
3. 参数exchange 里面 包含了 进入网关的 这个 请求的所有信息,取出url地址,header头、cookies,路径参数等等所有信息都可以,然后进行相应的 业务处理
4. return chain.filter(exchange) 将请求进行放行


请求日志记录

在网关微服务里,在这个地方加上这个命令,可以开启日志记录,将所有通过网关的请求,都记录下来,不过只是输出到控制台



gateway跨域配置

跨域:当http请求 不在 同一个ip+同一个端口时,就叫做跨域

(只有同一个ip+同一个端口才叫 同域,两个都满足才同域)

1. 通过yml配置的方式 ,配置在gateway的下一级

配置的内容可以自己修改跨域
2. 通过配置类的方式设置


sentinel结合gateway网关

结合sentinel对发送到gateway网关的请求,进行流控降级

sentinel分为两个部分
前提:远程服务器下载sentinel客户端,安装、运行后
gateway服务只需:
gateway服务的配置文件加上sentinel客户端的ip+端口、账号密码
这样就整合好了sentinel的流控降级
sentinel针对gateway网关服务有特殊的规则,它的界面和  对于controller中方法(服务入口)的流控降级界面不太一样
可以针对断言工厂里面的这些规则进行限流
可以针对某个ip、远程域名、请求头、url中的参数、cookie值进行限流


自定义sentinel结合网关 后的响应内容

网关层被sentinel流控降级或者熔断后,会响应下面的内容给发送请求者

这样的内容如果不是我们想要的,就需要自定义响应异常的方式。有两种方式

方式1:(简单)

 

在yml配置中,分层写上面的内容,

spring . cloud . sentinel . scg . fallback . response body = '{"code":403,"mes":" 限流了 "}'
response‐body后面的内容就是我们自定义的响应内容(json格式的) ,写的内容就是响应的内容
方式2:

设置响应状态码、响应类型(json格式的)、响应内容(“降级了!”)



网关高可用

相关文章:

gateway

gateway核心概念 1. 路由(route) 路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL 和 配置的路由匹配。 2. 断言(predicates) 断言函数允许开发者去定义匹配Htt…...

第一个ffmpeg程序

在进行使用ffmpeg进行编写程序时,首先要记得进行注册设备(avdevice_register_all ),程序运行时,只需要注册一次就可以 avdevice_register_all 是 FFmpeg 多媒体处理库中的一个函数,其作用是注册所有可用的音…...

论文翻译:Large Language Models for Education: A Survey and Outlook

https://arxiv.org/abs/2403.18105 目录 教育领域的大型语言模型:一项调查和展望摘要1. 引言2. 教育应用中的LLM2.1 概述2.2 学习辅助2.2.1 问题解决(QS) 2.2.2 错误纠正(EC)2.2.3 困惑助手(CH)…...

python为什么慢?(自用)

《Cython系列》1. Cython 是什么?为什么要有 Cython?为什么我们要用 Cython? - 古明地盆 - 博客园 (cnblogs.com) 古明地盆的主页 - 博客园 (cnblogs.com) 我原本认为,python慢的原因是“逐行解释程序并执行”,那么我…...

压缩感知3——重构算法正交匹配追踪算法

算法流程 问题的实质是&#xff1a;AX Y 求解&#xff08;A是M维&#xff0c;Y是N维且N>>M并且稀疏度K<M&#xff09;明显X有无穷多解&#xff0c;重构过程是M次采样得到的采样值升维的过程。OMP算法的具体步骤&#xff1a;(1)用X表示信号&#xff0c;初始化残差e0 …...

“好物”推荐+Xshell连接实例+使用Conda创建独立的Python环境

目录 主题&#xff1a;好易智算平台推荐RTX 4090DGPU实例租用演示安装配置torch1.9.1cuda11.1.1环境引言&#xff1a;算力的新时代平台介绍&#xff1a;技术与信任的结晶使用案例&#xff1a;实际使用展示创建实例开始使用连接实例&#xff08;下文演示使用Xshell连接&#xff…...

浪潮天启防火墙TQ2000远程配置方法SSL-V偏、L2xx 配置方法

前言 本次设置只针对配置V偏&#xff0c;其他防火墙配置不涉及。建议把防火墙内外网都调通后再进行V偏配置。 其他配置可参考&#xff1a;浪潮天启防火墙配置手册 配置SSLVxx 在外网端口开启SSLVxx信息 开启SSLVxx功能 1、勾选 “启用SSL-Vxx” 2、设置登录端口号&#xff0…...

java八股文面试题

Java八股文面试题通常涵盖了Java语言的基础知识、高级特性、框架应用、数据库操作等多个方面。以下是一些常见的Java面试题及其详细回答&#xff0c;按照不同的主题进行分类&#xff1a; 一、Java基础 面向对象的特征有哪些&#xff1f; 抽象&#xff1a;忽略与当前目标无关的…...

【服务器】在Linux查看运行的Python程序,并找到特定的Python程序

在Linux查看运行的Python程序并找到特定的Python程序 写在最前面1. 使用ps命令查看所有Python进程查看详细信息 2. 使用pgrep命令查找Python进程ID 3. 使用top或htop命令使用top命令使用htop命令 4. 使用lsof命令查找Python进程打开的文件 5. 使用nvidia-smi命令查看GPU使用情况…...

安全防御---防火墙实验1

安全防御—防火墙实验1 一、实验拓扑与要求 要求&#xff1a; 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00-18:00)可以访问&#xff0c;生产区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 …...

SpringBoot配置Swagger开启页面访问限制

在Spring Boot项目中配置Swagger时&#xff0c;开启页面访问限制通常意味着你希望控制哪些用户或角色可以访问Swagger UI文档页面。由于Swagger UI是一个静态资源&#xff0c;它本身并不直接支持基于角色的访问控制&#xff08;RBAC&#xff09;。但是&#xff0c;你可以通过Sp…...

前端代码基本逻辑-vue3

前端vue建立过程 安装nodejs 官网下载安装&#xff0c;并且记住安装路径&#xff0c;记得配置系统变量Path 安装VUE/CLI npm install -g vue/cli --全局安装vue 使用VUE/CLI生成代码框架 vue create your-project-name --我的your-project-name为web 运行项目 cd your-…...

怎么用PPT录制微课?详细步骤解析!

随着信息技术的不断发展&#xff0c;微课作为一种新型的教学形式&#xff0c;因其短小精悍、针对性强等特点&#xff0c;在教育领域得到了广泛的应用。而PPT作为一款常用的演示工具&#xff0c;不仅可以用来制作课件&#xff0c;还可以利用其内置的录屏功能或结合专业的录屏软件…...

Git使用方法

Git是一种分布式版本控制系统&#xff0c;它可以记录和管理软件开发过程中的变更。 Git的基本概念包括以下几个部分&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git用仓库来存储项目的代码和历史记录。一个仓库可以包含多个分支。 分支&#xff08;Bran…...

HTTP的请求报文和响应报文是怎样的,有哪些常见字段?

http报文分为请求报文和响应报文 请求报文包含&#xff1a;请求行、请求头、空行、、请求体 请求行包含&#xff1a; 方法&#xff1a;即要执行的操作&#xff0c;如get&#xff0c;post、put、delet 资源路径&#xff1a;请求的资源的URL HTTP版本&#xff1a;使用的http协议…...

自注意力简介

在注意力机制中&#xff0c;每个查询都会关注所有的键值对并生成一个注意力输出。如果查询q&#xff0c;键k和值v都来自于同一组输入&#xff0c;那么这个注意力就被称为是自注意力&#xff08;self-attention&#xff09;。自注意力这部分理论&#xff0c;我觉得台大李宏毅老师…...

【GameFramework框架】7-2、GameFramework框架是否“过度设计”?

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q764424567/article/details/1…...

RISC-V异常处理流程概述(2):异常处理机制

RISC-V异常处理流程概述(2):异常处理机制 一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册一、异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先需要执…...

Unity3D中如何降低游戏的Drawcall详解

在Unity3D游戏开发中&#xff0c;Drawcall是一个至关重要的性能指标&#xff0c;它指的是CPU通知GPU绘制一个物体的命令次数。过多的Drawcall会导致游戏性能下降&#xff0c;因此优化Drawcall的数量是提高游戏性能的关键。本文将详细介绍Unity3D中降低Drawcall的几种主要方法&a…...

小程序-设置环境变量

在实际开发中&#xff0c;不同的开发环境&#xff0c;调用的接口地址是不一样的 例如&#xff1a;开发环境需要调用开发版的接口地址&#xff0c;生产环境需要正式版的接口地址 这时候&#xff0c;我们就可以使用小程序提供了 wx.getAccountInfoSync() 接口&#xff0c;用来获取…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

Python环境安装与虚拟环境配置详解

本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南&#xff0c;适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者&#xff0c;都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...

软件工程教学评价

王海林老师您好。 您的《软件工程》课程成功地将宏观的理论与具体的实践相结合。上半学期的理论教学中&#xff0c;您通过丰富的实例&#xff0c;将“高内聚低耦合”、SOLID原则等抽象概念解释得十分透彻&#xff0c;让这些理论不再是停留在纸面的名词&#xff0c;而是可以指导…...

【计算机网络】SDN

SDN这种新型网络体系结构的核心思想&#xff1a;把网络的控制层面与数据层面分离&#xff0c;而让控制层面利用软件来控制数据层面中的许多设备。 OpenFlow协议可以被看成是SDN体系结构中控制层面与数据层面之间的通信接口。 在SDN中取代传统路由器中转发表的是“流表”&…...