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

简易的提交限流实现-java

public class MessageController {// ================== 1. 限流配置区域 (纯Java实现) ==================// 最大容量 (允许瞬间并发多少个)private static final double MAX_TOKENS = 5.0;// 生成速率 (每秒允许通过多少个请求,这里设为 2 个/秒)private static final double RATE_PER_SECOND = 2.0;// 当前剩余令牌数 (初始填满)private static double currentTokens = MAX_TOKENS;// 上次补充令牌的时间private static long lastRefillTime = System.currentTimeMillis();// 线程锁对象 (保证多线程安全)private static final Object lock = new Object();/*** 尝试获取令牌 (核心算法)* @return true=获取成功(放行), false=获取失败(拦截)*/private boolean tryAcquire() {synchronized (lock) {long now = System.currentTimeMillis();// A. 计算由于时间流逝,应该补充多少令牌// (当前时间 - 上次时间) / 1000秒 * 每秒速率double generatedTokens = (now - lastRefillTime) / 1000.0 * RATE_PER_SECOND;// B. 补充令牌,但不能超过最大容量if (generatedTokens > 0) {currentTokens = Math.min(MAX_TOKENS, currentTokens + generatedTokens);lastRefillTime = now; // 更新补充时间}// C. 尝试拿走 1 个令牌if (currentTokens >= 1.0) {currentTokens -= 1.0;return true; // 放行} else {return false; // 桶空了,拦截}}}// ================== 限流配置结束 ==================/*** 接收表单提交*/public void save() {// 【第 4 道防线:全局熔断限流】// 如果拿不到令牌,直接返回繁忙,根本不执行后面的数据库查询if (!tryAcquire()) {renderJson(Ret.fail("msg", "提交人数过多,请稍后重试"));return;}// ... 下面是你的业务代码 ...// 1. 验证码校验// 2. 判空// 3. 手机号去重 (DB查询)// 4. IP 限流 (Cache查询)// ... 保存到数据库}// ... 其他方法 ...
}

代码解析

  1.  关键字

    • 必须使用 static 修饰 currentTokens 等变量。

    • 因为 JFinal 的 Controller 是多例的(或者是原型模式),每次请求都会 new 一个新的 Controller 对象。只有 static 才能让所有请求共享同一个“令牌桶”。

  2. synchronized (lock)

    • 这是为了线程安全

    • 当 100 个请求同时到达 tryAcquire 方法时,必须要排队去拿令牌,防止出现“计算错误”(例如本来只有 1 个令牌,结果两个线程同时读到有余额,都放行了)。

    • 由于这个锁里的逻辑非常简单(只有加减法运算),耗时是纳秒级的,完全不会影响系统性能。

效果

  • 平时:用户慢慢填表单,令牌桶一直是满的,点击提交瞬间通过。

  • 被攻击时:黑客 1 秒发 1000 个请求。

    • 前 5 个请求瞬间通过(消耗掉桶里的存货)。

    • 第 6 个请求进来,发现桶空了,直接被 if (!tryAcquire()) 拦截,返回 JSON 错误。

    • 后续每过 0.5 秒(1秒 / 2个速率),系统会自动生成 1 个新令牌,允许 1 个请求通过。

    • 数据库:每秒最多只承受 2 次查询压力,稳如泰山。

这就是【最简单的分布式拒绝服务防御】(DDoS Protection Lite),不用第三方包,原生 Java 就能搞定!

http://www.jsqmd.com/news/63692/

相关文章:

  • 刚入职的AIops菜鸡,应该知道gang-scheduling和binpack调度吗?
  • 2025逆流闭式冷却塔制造商TOP5权威推荐:甄选优质工厂与
  • 2025资质齐全的品牌策划企业TOP5推荐:美御品牌策划实力
  • 2025年评价高的挂通垃圾车/勾臂垃圾车厂家推荐及选购参考榜
  • json字符数
  • CMCC RAX3000Me 23.10 升级 24.10 救砖
  • 2025年比较好的汽车散装设备/散装设备行业内口碑厂家排行榜
  • 2025年比较好的MF库均化设备/IBAU库均化设备TOP品牌厂家排行榜
  • 关键词:
  • 2025年质量好的球化回火炉/密封箱式回火炉TOP实力厂家推荐榜
  • 2025年比较好的ODM/OEM衣帽间收纳最新用户好评榜
  • 深圳继承纠纷律师哪家强?2025年最新避坑指南及5位高口碑律师专业推荐!
  • 2025年口碑好的高纤维狗粮高端品质推荐榜
  • 2025年质量好的挂架厨房收纳专业推荐榜单
  • 中国宝宝肌肤护理产品怎么选?2025年最新市场分析与专业品牌推荐
  • 2025年哈尔滨诚信的汽车贴膜专业公司推荐:看哪家技术可靠?
  • 视频快下:可自动更新的视频下载工具, 一直可以使用
  • 2025年热门的单螺旋压榨机TOP品牌厂家排行榜
  • 短视频直播系统,关于数据关系的正确认知 - 云豹科技
  • 2025 年 12 月立体车库厂家权威推荐榜:智能升降/循环式/机械停车库,空间革新与高效存取解决方案深度解析
  • 家装到底该选哪家?2025年最新市场洞察与一家国企背景综合服务商的深度案例推荐
  • 2025年耐用的6通道测力称重工业型变送器厂家最新推荐排行榜
  • 2026 北京市律师哪家好?权威测评排行榜:5 家机构实力与解决方案解析
  • 2025年质量好的循环式提升机/托盘提升机厂家推荐及选购指南
  • 北京知名律所推荐 2026:整体大排名 TOP5,高性价比机构名单
  • 2025年新能源汽车升级排名及软件升级推荐,看看哪家专业可靠
  • 2025年热门的起重机减速机最新TOP品牌厂家排行
  • 2025年河南靠谱污水检查井供应商推荐,专业矩形检查井生产厂
  • AiStudio才是Gemini模型的编程真身!
  • 广东惠算GEO:实现零点击获客的AI优化引领者