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.hqwc.cn/news/333160.html

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

相关文章

PPT插件-大珩助手-倒计时增加姓名

姓名倒计时 为方便使用同一台电脑进行计时&#xff0c;需要对不同的计时器进行区分&#xff0c;因此在原有的计时器上增加了可编辑的姓名&#xff0c;方便多人计时使用。 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件&#xff0c;它是一款功能强大且实用的PPT辅助工具…

7 集中式日志和分布式跟踪

文章目录 日志聚合模式日志集中化的简单解决方案使用日志并输出分布式跟踪Spring Cloud Sleuth实现分布式跟踪 小结 前面的文章&#xff1a; 1、 1 一个测试驱动的Spring Boot应用程序开发 2、 2 使用React构造前端应用 3、 3 试驱动的Spring Boot应用程序开发数据层示例 4、…

腾讯云域名外部入库流程

注册商是腾讯云&#xff0c;且在腾讯云管理的&#xff0c;请使用此教程外部入库。 如您的域名注册商是腾讯云但在聚名管理&#xff0c;请参考教程&#xff1a;https://www.west.cn/faq/list.asp?unid2539 在外部入库操作之前&#xff0c;请先登录腾讯云获取账号ID信息。…

springboot基于java的小区物业管理系统(保安巡逻绿化消防)设计+jsp

小区物业管理系统采用的是JAVA语言开发&#xff0c;利用MySQL为数据库&#xff0c; 使用IDEA平台来编写代码&#xff0c;框架方面选择的是springbootweb框架&#xff0c;采用B/S结构实现系统。本系统的设计与开发过程中严格遵守软件工程的规范&#xff0c;运用软件设计模式&…

2024第15届电子教育、电子商务、电子管理和电子学习国际会议

第十五届电子教育、电子商务、电子管理和电子学习国际会议&#xff08;IC4E 2024&#xff09;将于2024年3月18日-21日在日本福冈举办。本次会议以电子技术为核心&#xff0c;围绕电子教育、电子商务、电子管理以及电子学习等各个方面展开研讨&#xff0c;为相关领域的专家学者们…

LeetCode-1822/1502/896/13

1.数组元素积的符号&#xff08;1822&#xff09; 题目描述&#xff1a; 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。 如果 x 是负数&#xff0c;返回 -1 。 如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组…

JavaScript的闭包、执行上下文、到底是怎么回事?还有必要学吗?

在上一课&#xff0c;我们了解了 JavaScript 执行中最粗粒度的任务&#xff1a;传给引擎执行的代码段。并且&#xff0c;我们还根据“由 JavaScript 引擎发起”还是“由宿主发起”&#xff0c;分成了宏观任务和微观任务&#xff0c;接下来我们继续去看一看更细的执行粒度。 一…

java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 体育明星管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

25 心形按钮

效果演示 实现了一个心形的心形图案&#xff0c;当用户点击图案时&#xff0c;图案会旋转并缩小&#xff0c;同时背景颜色会变成白色。 Code <div class"love"><input id"switch" type"checkbox"><label class"love-heart&…

今日实践 — 附加数据库/重定向失败如何解决?

WMS数据库与重定向 前言正文如何建立数据库连接&#xff1f;第一步&#xff1a;打开SSMS&#xff0c;右击数据库&#xff0c;点击附加第二步&#xff1a;点击添加第三步&#xff1a;找到自己的数据库文件&#xff0c;点击确定按钮第四步&#xff1a;若有多个数据库&#xff0c;…

创建一个郭德纲相声GPTs

前言 在这篇文章中&#xff0c;我将分享如何利用ChatGPT 4.0辅助论文写作的技巧&#xff0c;并根据网上的资料和最新的研究补充更多好用的咒语技巧。 GPT4的官方售价是每月20美元&#xff0c;很多人并不是天天用GPT&#xff0c;只是偶尔用一下。 如果调用官方的GPT4接口&…

基于JAVA+SpringBoot的咖啡商城

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着互联网的普及和发…