news 2026/5/4 10:50:10

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/5/2 3:35:50

告别低效内耗!这款CRM营销管理系统,让职场人少走80%的弯路

你是否每天被这些职场难题裹挟&#xff0c;身心俱疲却业绩平平&#xff1f; ✅ 营销获客像“大海捞针”&#xff1a;砸钱投渠道、熬夜做推广&#xff0c;线索来了却杂乱无章&#xff0c;高价值客户藏在信息堆里无人问津&#xff0c;获客成本居高不下&#xff0c;转化效果惨不忍…

作者头像 李华
网站建设 2026/4/17 17:01:56

AI智能生成微信红包封面工具 | 一键制作个性化红包封面系统源码

AI微信红包封面生成器源码是一款开源的微信红包封面生成工具&#xff0c;由前腾讯微信后台开发工程师「idoubi」开发并开源。项目名为“AI Cover”&#xff0c;旨在利用人工智能技术为用户提供个性化的微信红包封面生成服务。支持用户登录、付费方案和积分系统&#xff0c;提供…

作者头像 李华
网站建设 2026/4/21 21:10:36

5 款 AI 写论文哪个好?实测后发现:虎贲等考 AI 凭这 3 点碾压同类

在学术写作数字化转型的浪潮中&#xff0c;无数科研人、学子被 “文献难寻、数据失真、格式混乱、查重焦虑” 等痛点困扰。虎贲等考 AI 智能写作平台&#xff08;官网&#xff1a;https://www.aihbdk.com/&#xff09;应势而生&#xff0c;作为一款深度融合前沿人工智能技术的专…

作者头像 李华
网站建设 2026/4/27 16:12:21

利用Snyk发现与修复漏洞:守护软件安全,保障业务稳定

利用Snyk发现与修复漏洞&#xff1a;守护软件安全&#xff0c;保障业务稳定 作为一名开发者&#xff0c;代码的安全性和稳定性对我们保持理智至关重要。当代码不稳定或容易出错时&#xff0c;修复起来会令人沮丧且耗时&#xff0c;导致不知所措和心力交瘁的感觉。 这就是Snyk的…

作者头像 李华
网站建设 2026/5/3 17:55:25

搞一个免费10年的二级域名,公网访问飞牛NAS

有小伙伴想找一个免费的域名&#xff0c;但是最后还是自己买了一个。域名这个东西本身应该是无限多的&#xff0c;但是为啥还要花钱购买呢&#xff1f;嗯…… 所以&#xff0c;今天咱们搞一个免费的二级域名&#xff0c;足够使用就好。免费期限似乎是10年。 正文开始 目录导航…

作者头像 李华