Spring Cloud Gateway整合Sentinel

日升时奋斗,日落时自省 

目录

1、实现整合

1.1、添加框架依赖

 1.2、设置配置文件

1.3、设置限流和熔断规则

1.3.1、限流配置

Route ID限流配置

API限流配置

1.3.2、熔断配置

2、实现原理


先前Sentinel针对是业务微服务,没有整合Sentinel到Spring Cloud Gateway

Spring Cloud Gateway 默认是有限流功能的,但限流功能比较简单,所以咱们今天要实现的是 Spring Cloud Gateway 整合 Spring Cloud AlibabaSentinel 实现限流和熔断功能,这种方式也是目前生成环境主流的限流和熔断的实现方法。

1、实现整合

Gateway整合Sentinel总共分为以下4步:

(1)添加框架依赖

(2)设置配置文件

(3)配置拦截规则

(4)验证效果

接下来,我们一步一步来实现

1.1、添加框架依赖

需要框架依赖有3个:gateway、sentinel和sentinel-gateway(Sentinel对接Gateway的适配框架,Sentinel1.6新增模块),如下配置所示:

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

 1.2、设置配置文件

在application中设置sentinel控制台的地址,以及限流之后的响应信息:

spring:cloud:gateway:routes:- id: userserviceuri: http://localhost:9090predicates:- Path=/user/**sentinel:transport:dashboard: localhost:18086scg:fallback:mode: responseresponse-status: 200response-body: '{"code":429,"message":"被限流了!"}'application:name: gateway-service
server:port: 10086

scg(Spring Cloud Gateway):配置网关专用

fallback:降级处理配置

mode:response 指定降级处理的模式为返回响应

response-status:表示响应状态

response-body:就是响应信息

限制规则中的重定位配置如下:

      scg:fallback:mode: redirectresponse-status: 200response-body: '{"code":429,"message":"被限流了!"}'redirect: https://blog.csdn.net/c_study__c?spm=1011.2124.3001.5343    #跳转地址

1.3、设置限流和熔断规则

进入sentinel控制台,内容有变

 限流或熔断配置就在“请求链路”中配置

1.3.1、限流配置

限流可以配置两种 API 类型: Route ID 和 API 分组

  • Route ID 是和 Gateway 中的 Routes (每个路由)一一对应的API 分组是自定义
  • API 规则 (开发人员可以自定义)
Route ID限流配置

限流配置参数:

resourceMode: 规则是针对API Gateway 的 Route ID (RESOURCE MODE_ROUTE ID),还是用户在Sentinel 中定义的 API分组 (RESOURCE MODE CUSTOM API NAME) ,默认是 Route ID.

resource: 资源名称,可以是网关中的 Route ID 名称或者用户自定义的 API 分组名称

grade: 阈值类型,QPS 或线程数。

count: 具体值intervalSec: 统计时间窗口,单位是秒,默认是 1 秒

controlBehavior: 流量整形的控制效果,目前支持快速失败和匀速排队两种模式,默认是快速失败。

controlBehavior: 流量整形的控制效果,目前支持快速失败和匀速排队两种模式,默认是快速失败

Burst size: 应对突发请求时额外允许的请求数目。

maxQueueingTimeoutMs: 匀速排队模式下的最长排队时间,单位是毫秒,仅在匀速排队模式下生效

paramItem: 参数限流配置。若不提供,则代表不针对参数进行限流,该网关规则将会被转换成普通流控规8则;否则会转换成热点规则,它包含的字段:

  • parseStrategy:从请求中提取参数的策略,目前支持提取来源 IPa.(PARAM PARSE STRATEGY CLIENT IP) 、Host (PARAM PARSE STRATEGY HOST) 、 Header(PARAM PARSE STRATEGY HEADER) 意 URL 参 (PARAM PARSE STRATEGY URL PARAM)种模式。
  • fieldName: 若提取策略选择 Header 模式或 URL 参数模式,则需要指定对应的 header 名称或 URL参数名称
  • pattern:参数值的匹配模式,只有匹配该模式的请求属性值会纳入统计和流控,若为空则统计该请求属性的所有值。
  • matchStrategy: 参数值的匹配策略,目前支持精确匹配 (PARAM MATCH STRATEGY_EXACT)、子串匹 (PARAM MATCH STRATEGY CONTAINS) 和E则匹 (PARAM MATCH STRATEGY REGEX)。
API限流配置

先到API管理

 这是API组名: 并且添加匹配规则

匹配规则顾名思义:

  • 精确:访问那个写那个(写全)
  • 前缀:凡是这个前缀的都受到限制
  • 正则:就是类似正则表达匹配方式

 新增好以后,回到请求链路

此时API名称会有内容供友友们选择

 注:操控其实差不多,更加灵活了

1.3.2、熔断配置

降级配置也就是熔断配置,在程序运行期间出现了某种异常就会触发的机制。它是在"请求链路“中点击“降级”按钮就能看到:

 

熔断策略: 使用哪种策略来进行熔断操作。

慢调用比例: 在统计时长内的所有请求,如果请求时间超过 xx 秒则为慢请求,且慢请求的超过一定的比例,且请求数大于最小请求数将触发熔断操作,也就是一段时间内 (熔断时长参数设置) 的请求会快速失败。

异常比例: 在统计时长内的所有请求,如果异常的比例大于闯值,且请求数大于最小请求数,将触发熔断,也就是一段时间内 (熔断时长参数设置)的请求会快速失败。

异常数:在统计时长内的所有请求,如果异常数大于闯值,且请求数大于最小请求数,将触发熔断,也就是一段时间内 (熔断时长参数设置)的请求会快速失败。

2、实现原理

外部请求进入 API Gateway 时会经过 Sentinel 实现的 filter,其中会依次进行 路由/API 分组匹配请求属性解析参数组装。Sentinel 会根据配置的网关流控规则来解析请求属性,并依照参数索引顺序组装参数数组,最终传入 SphU.entry(res, args) 中。Sentinel API Gateway Adapter Common 模块向 Slot Chain 中添加了一个 GatewayFlowSlot,专门用来做网关规则的检查。GatewayFlowSlot 会从 GatewayRuleManager 中提取生成的热点参数规则,根据传入的参数依次进行规则检查。若某条规则不针对请求属性,则会在参数最后一个位置置入预设的常量,达到普通流控的效果。

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

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

相关文章

前端发开的性能优化 请求级:请求前(资源预加载和预读取)

预加载 预加载&#xff1a;是优化网页性能的重要技术&#xff0c;其目的就是在页面加载过程中先提前请求和获取相关的资源信息&#xff0c;减少用户的等待时间&#xff0c;提高用户的体验性。预加载的操作可以尝试去解决一些类似于减少首次内容渲染的时间&#xff0c;提升关键资…

python统计分析——直方图(sns.histplot)

使用seanborn.histplot()函数绘制直方图 from matplotlib.pyplot as plt import seaborn as snsdata_setnp.array([2,3,3,4,4,4,4,5,5,6]) plt.hist(fish_data) &#xff08;1&#xff09;dataNone, 表示数据源。 &#xff08;2&#xff09;xNone, 表示直方图的分布垂直与x轴…

程序媛的mac修炼手册-- 终端shell的驾驭 zsh vs bash

进入终端(Terminal)为新下载的应用配置环境&#xff0c;是Mac生产力up up的关键一步&#xff0c;更是编程小白装大神的第一步。Fake it till you make it , 硅谷大神标准路径&#xff5e; shell的基本原理 为应用配置环境&#xff0c;相当于在应用和操作系统间架桥。由此&…

Flink Watermark和时间语义

Flink 中的时间语义 时间语义&#xff1a; EventTime&#xff1a;事件创建时间&#xff1b;Ingestion Time&#xff1a;数据进入Flink的时间&#xff1b;Processing Time&#xff1a;执行操作算子的本地系统时间&#xff0c;与机器无关。不同的时间语义有不同的应用场合&#x…

数据分析基础之《numpy(6)—IO操作与数据处理》

了解即可&#xff0c;用panads 一、numpy读取 1、问题 大多数数据并不是我们自己构造的&#xff0c;而是存在文件当中&#xff0c;需要我们用工具获取 但是numpy其实并不适合用来读取和处理数据&#xff0c;因此我们这里了解相关API&#xff0c;以及numpy不方便的地方即可 2…

【JavaFX】JavaFX11开发踩坑记录

文章目录 技术栈踩坑记录 技术栈 JavaFX 11MavenJDK 11 踩坑记录 这些坑对于初学者很容易踩&#xff0c;JavaFX经常会报错空指针异常遇到其中一个问题可能就会消耗好几天的时间。 JavaFX 采用的是MVC架构设计&#xff0c;页面设计使用 fxml文件&#xff1b;业务逻辑采用Con…

【实用工具】FFmpeg常用的命令

前言 FFmpeg是一个强大的多媒体处理工具&#xff0c;可以用于处理音频、视频和图像。 命令格式 ffmpeg {1} {2} -i {3} {4} {5} 上面命令中&#xff0c;五个部分的参数依次如下。 1.全局参数 2.输入文件参数 3.输入文件 4.输出文件参数 5.输出文件 常见命令行参数 -c&…

漏洞复现-天融信TOPSEC static_convert 远程命令执行漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

2016年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天我们来看2016年的AMC8竞赛真题的典型考题和解析&#xff0c;最后利用碎片化时间冲刺&#xff0c;查漏补缺&#xff0c;提高成绩。温馨提示&#xff1a;2024年AMC8比赛现在还可以报名&#xff0c;自由报名截止到1月7日&#xff0c;我这里有官方自由报名通道。后续官方模拟题…

美国地质调查局历史地形图

简介 美国地质调查局地形图的历史可以追溯到 19 世纪末&#xff0c;当时美国地质调查局开始着手绘制整个美国的详细地图。1:24,000 比例尺&#xff0c;也称为 7.5 分四边形地图&#xff0c;成为最广泛使用的比例尺之一。每张地图覆盖 7.5 分经纬度的区域&#xff0c;从而详细呈…

计算机基础面试题 |07.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

HackTheBox - Medium - Linux - BroScience

BroScience BroScience 是一款中等难度的 Linux 机器&#xff0c;其特点是 Web 应用程序容易受到“LFI”的攻击。通过读取目标上的任意文件的能力&#xff0c;攻击者可以深入了解帐户激活码的生成方式&#xff0c;从而能够创建一组可能有效的令牌来激活新创建的帐户。登录后&a…

canvas绘制椭圆形示例

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

Liunx(CentOS)安装Nacos(单机启动,绑定Mysql)

Liunx安装Nacos(单机启动&#xff0c;绑定Mysql) 一&#xff0c;准备安装包 github下载点 二&#xff0c;在/usr/local/目录下创建一个文件夹用于上传和解压Nacos cd /usr/local/ #这里创建文件夹名字可随意&#xff0c;解压后会生成一个名为nacos的文件夹&#xff0c;后续…

❀记忆冒泡、选择和插入排序算法思想在bash里运用❀

目录 冒泡排序算法:) 选择排序算法:) 插入排序算法:) 冒泡排序算法:) 思想&#xff1a;依次比较相邻两个元素&#xff0c;重复的进行直到没有相邻元素需要交换&#xff0c;排序完成。 #!/bin/bash arr(12 324 543 213 65 64 1 3 45) #定义一个数组 n${#arr[*]} #获取数组…

海外静态IP和动态IP有什么区别?推荐哪种?

什么是静态ip、动态ip&#xff0c;二者有什么区别&#xff1f;哪种好&#xff1f;关于这个问题&#xff0c;不难发现&#xff0c;在知道、知乎上面的解释有很多&#xff0c;但据小编的发现&#xff0c;这些回答都是关于静态ip和动态ip的专业术语解释&#xff0c;普通非专业人事…

一、初识Redis与分布式系统

目录 一、Redis应用 二、实现方式 三、Redis应用 四、分布式系统 五、分布式系统实现 1、应用服务和数据库服务分离 2、引入负载均衡&#xff0c;应用服务器集群&#xff08;解决高并发&#xff09; 3、引入读写分离&#xff0c;数据库主从结构&#xff08;解决高并发&a…

Spark---RDD算子(单值类型Value)

文章目录 1.RDD算子介绍2.转换算子2.1 Value类型2.1.1 map2.1.2 mapPartitions2.1.3 mapPartitionsWithIndex2.1.4 flatMap2.1.5 glom2.1.6 groupBy2.1.7 filter2.1.8 sample2.1.9 distinct2.1.10 coalesce2.1.11 repartition2.1.12 sortBy 1.RDD算子介绍 RDD算子是用于对RDD进…

【UEFI基础】EDK网络框架(基础说明)

基础说明 UEFI中的网络框架大致如下&#xff1a; 红框部分是实现UEFI的EDK2开源项目中网络框架自带的实现&#xff0c;红框之外的部分需要网卡设备商提供驱动。UEFI下通常推荐使用最右边的形式&#xff0c;即网卡设备商提供实现了UNDI的网卡驱动。因此UEFI网络框架的另一个形式…

线性代数_对称矩阵

对称矩阵是线性代数中一种非常重要的矩阵结构&#xff0c;它具有许多独特的性质和应用。下面是对称矩阵的详细描述&#xff1a; ### 定义 对称矩阵&#xff0c;即对称方阵&#xff0c;是指一个n阶方阵A&#xff0c;其转置矩阵等于其本身&#xff0c;即A^T A。这意味着方阵A中的…