news 2026/6/11 8:12:12

Sentinel 流控配置案例:两次请求的时间间隔必须在3秒以上

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sentinel 流控配置案例:两次请求的时间间隔必须在3秒以上

要实现“两次请求的时间间隔必须在3秒以上”这种需求,需要根据具体的业务场景选择合适的Sentinel配置方式。本文博主将介绍几种实现方案:

方案1:使用排队等待流控效果(最接近需求)

# Sentinel规则配置(对应控制台设置)规则类型:流控规则 资源名:yourResource 流控模式:直接 阈值类型:QPS 阈值:0.33(因为1/3≈0.33,即每秒最多0.33个请求) 流控效果:排队等待 超时时间:3000ms(3秒)

控制台设置:

┌─────────────────────────────────────┐ │ 添加流控规则 │ ├─────────────────────────────────────┤ │ 资源名: yourResource │ │ 阈值类型: QPS │ │ 单机阈值: 0.33 │ │ 流控模式: [直接] │ │ │ │ 流控效果: [排队等待] │ │ 超时时间: 3000 ms │ └─────────────────────────────────────┘

工作原理:

  • 请求进入队列排队
  • 每个请求处理间隔至少3秒
  • 如果请求到达太快,会在队列中等待
  • 如果等待时间超过3秒,会被拒绝

代码示例:

@RestControllerpublicclassMyController{@GetMapping("/api/resource")@SentinelResource(value="myResource",blockHandler="handleBlock")publicStringmyApi(){// 业务逻辑return"success";}// 阻塞处理函数publicStringhandleBlock(BlockExceptione){return"请求太频繁,请至少间隔3秒再试";}}

方案2:使用Warm Up预热模式(接近但不完全符合)

规则类型:流控规则 资源名:yourResource 阈值类型:QPS 阈值:0.33 流控效果:Warm Up 预热时长:3秒

方案3:使用热点参数限流(针对同一用户/设备)

如果需要针对同一用户限制3秒间隔,使用热点参数规则:

@GetMapping("/api/resource")@SentinelResource(value="myResource")publicStringmyApi(@RequestParamStringuserId){// 业务逻辑return"success";}

控制台配置:

规则类型:热点参数规则 资源名:myResource 参数索引:0(对应userId) 单机阈值:1(每个userId) 统计窗口时长:3000ms(3秒)

方案4:自定义实现(最灵活)

@ComponentpublicclassRequestIntervalLimiter{privatefinalMap<String,Long>lastRequestTime=newConcurrentHashMap<>();publicbooleanallowRequest(Stringkey){longcurrentTime=System.currentTimeMillis();LonglastTime=lastRequestTime.get(key);if(lastTime==null){lastRequestTime.put(key,currentTime);returntrue;}// 检查时间间隔if(currentTime-lastTime>=3000){lastRequestTime.put(key,currentTime);returntrue;}returnfalse;}}@RestControllerpublicclassMyController{@AutowiredprivateRequestIntervalLimiterlimiter;@GetMapping("/api/resource")publicResponseEntity<?>myApi(HttpServletRequestrequest){StringclientId=getClientId(request);// 获取客户端标识if(!limiter.allowRequest(clientId)){returnResponseEntity.status(429).body("请求太频繁,请至少间隔3秒再试");}// 业务逻辑returnResponseEntity.ok("success");}privateStringgetClientId(HttpServletRequestrequest){// 根据业务获取客户端标识// 可以是:userId, IP, sessionId等returnrequest.getHeader("X-User-Id")!=null?request.getHeader("X-User-Id"):request.getRemoteAddr();}}

方案5:使用Sentinel的系统自适应保护(全局限制)

spring:cloud:sentinel:filter:enabled:true# 系统规则 - 限制整体QPSdatasource:ds1:nacos:server-addr:localhost:8848dataId:sentinel-system-rulesrule-type:system

系统规则配置:

{"avgRt":1000,"highestSystemLoad":0.8,"qps":0.33,// 全局QPS限制"highestCpuUsage":0.8,"maxThread":50}

推荐方案比较

方案优点缺点适用场景
排队等待Sentinel原生支持不是严格3秒间隔需要均匀处理请求
自定义实现最精确控制需要自己实现精确的3秒间隔需求
热点参数按用户/设备限制配置复杂针对特定用户限制
系统规则全局控制不够精确系统整体保护

最接近需求的配置

如果严格要求"两次请求间隔必须≥3秒":

  1. 使用方案1的排队等待

    QPS阈值 = 1 / 3 ≈ 0.33 超时时间 = 3000ms
  2. 配合自定义逻辑增强

@ComponentpublicclassStrictIntervalLimiter{privatefinalLoadingCache<String,Long>requestCache=CacheBuilder.newBuilder().expireAfterWrite(3,TimeUnit.SECONDS).build(newCacheLoader<String,Long>(){@OverridepublicLongload(Stringkey){returnSystem.currentTimeMillis();}});publicbooleantryAcquire(Stringkey){try{// 如果key存在,说明3秒内有过请求LonglastTime=requestCache.getIfPresent(key);if(lastTime!=null){returnfalse;}requestCache.put(key,System.currentTimeMillis());returntrue;}catch(Exceptione){returnfalse;}}}

最佳实践建议:

  • 如果只是需要大致3秒间隔,使用方案1(排队等待)
  • 如果需要严格精确的3秒间隔,使用方案4(自定义实现)
  • 如果需要针对不同用户分别限制,使用方案3(热点参数)+ 方案4组合
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 22:31:10

电气领域项目大赏:从电机到并网,算法到控制

永磁同步电机PMSM负载状态估计&#xff08;龙伯格观测器&#xff0c;各种卡尔曼滤波器&#xff09;矢量控制&#xff0c;坐标变换&#xff0c;英文复现&#xff0c;含中文报告&#xff0c;可作为结课作业。 仿真原理图结果对比完全一致。 另外含有各种不同电机仿真包含说明文档…

作者头像 李华
网站建设 2026/6/1 21:32:30

计算机毕业设计之springboot体育课选课系统的设计与实现

时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;体育课选课系统当然不能排除在外。体育课选课系统是在实际应用和软件工程的开发原理之上&#xff0c;运用java语言&#xff0c;JSP技术以及Sprin…

作者头像 李华
网站建设 2026/6/10 10:33:05

RTSP/ONVIF协议平台EasyGBS打造雪亮工程国标GB28181视频监控体系

一、背景 在平安中国建设的大背景下&#xff0c;“雪亮工程”作为以群众参与为核心、以视频监控联网为重点的群众性治安防控工程&#xff0c;正逐步实现从“全域覆盖”向“智能高效”的转型升级。其核心目标是打破视频资源孤岛&#xff0c;构建县、乡、村三级联动的治安防控体…

作者头像 李华
网站建设 2026/6/9 22:07:06

法尔斯新闻社1398年波斯语新闻数据集_29万条_多领域分类_完整文本内容_自然语言处理_文本挖掘_机器学习训练数据_波斯语文本分类、主题建模、情感分析、命名实体识别、摘要生成等自然语言处理任务的研究

法尔斯新闻社1398年波斯语新闻数据集 引言与背景 法尔斯新闻社1398年波斯语新闻数据集是一个大规模、高质量的波斯语新闻文本数据集&#xff0c;收录了法尔斯新闻社在1398年&#xff08;即2019-2020年&#xff09;期间发布的全部新闻文章。该数据集包含294,023条新闻记录&…

作者头像 李华