接口限流代码

Crabc低代码平台实战——接口限流配置与优化 本文详细介绍了Crabc低代码平台中接口限流的配置与优化方法,包括基础配置、高级策略和性能优化技巧。通过实战案例和参数调优指南,帮助开发者有效应对高并发场景,保障系统稳定性。特别适合需要快速实现API流量控制的低代码平台用户。 阅读详情

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
</dependencies>



@Component
public class RateLimitInterceptor implements HandlerInterceptor {
    @Autowired
    private RateLimiter rateLimiter;

    @Override
    public boolean preHandle(HttpServletRequest request, 
                           HttpServletResponse response, 
                           Object handler) {
        String ip = request.getRemoteAddr();
        if (!rateLimiter.tryAcquire(ip)) {
            response.setStatus(429);
            return false;
        }
        return true;
    }
}



public class RedisRateLimiter implements RateLimiter {
    private final RedisTemplate<String, Object> redisTemplate;
    
    public boolean tryAcquire(String key, int limit, int timeout) {
        Long count = redisTemplate.opsForValue().increment(key, 1);
        if (count == 1) {
            redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
        }
        return count <= limit;
    }
}


public class TokenBucketRateLimiter implements RateLimiter {
    private final int capacity;
    private final double refillRate;
    private double tokens;
    private long lastRefillTime;

    public synchronized boolean tryAcquire() {
        refillTokens();
        if (tokens >= 1) {
            tokens--;
            return true;
        }
        return false;
    }
}



@Configuration
public class RateLimitConfig {
    @Bean
    public RateLimiter redisRateLimiter(RedisTemplate<String, Object> redisTemplate) {
        return new RedisRateLimiter(redisTemplate);
    }
    
    @Bean
    public RateLimiter tokenBucketRateLimiter() {
        return new TokenBucketRateLimiter(10, 1); // 10容量,每秒1个令牌
    }
}

  1. Redis限流:通过Redis的原子操作实现精确计数,适合分布式环境
  2. 令牌桶算法:单机限流方案,支持突发流量处理
  3. 拦截器机制:统一处理所有接口请求
  4. 可配置化:支持动态调整限流参数
  5. 响应状态码:返回429 Too Many Requests

实际部署时建议:

  • 结合Nginx层限流

user nginx;
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    # 白名单IP段定义
    geo $limit {
        default 1;
        10.0.0.0/8 0;    # 内网不限流
        192.168.1.100 0; # 特定IP不限流
    }

    # 分层限流区域定义
    limit_req_zone $binary_remote_addr zone=api_low:10m rate=100r/s;
    limit_req_zone $binary_remote_addr zone=api_medium:10m rate=50r/s;
    limit_req_zone $binary_remote_addr zone=api_high:10m rate=10r/s;
    
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

    # 自定义日志格式
    log_format rate_log '$remote_addr - $http_x_forwarded_for [$time_local] '
                       '"$request" $status $body_bytes_sent '
                       '"$http_referer" "$http_user_agent" '
                       'RateStatus=$limit_req_status ConnStatus=$limit_conn_status '
                       'ServiceTime=$request_time';

    access_log /var/log/nginx/rate_limit.log rate_log;
    error_log /var/log/nginx/error.log warn;

    server {
        listen 80;
        server_name api.example.com;

        # 公共静态资源不限流
        location /static/ {
            alias /var/www/static/;
            access_log off;
        }

        # 健康检查接口不限流
        location /health {
            access_by_lua_block {
                ngx.say("OK");
                ngx.exit(200);
            }
        }

        # 重要接口分层限流
        location ~ ^/api/vip/ {
            limit_req zone=api_high burst=20 nodelay;
            limit_conn conn_limit 3;
            proxy_pass http://backend_vip;
        }

        location ~ ^/api/business/ {
            limit_req zone=api_medium burst=30 delay=10;
            limit_conn conn_limit 10;
            proxy_pass http://backend_biz;
        }

        # 普通接口限流
        location /api/ {
            limit_req zone=api_low burst=50;
            limit_conn conn_limit 20;
            proxy_pass http://backend;
        }

        # 白名单绕过限流
        if ($limit = 0) {
            set $limit_pass 1;
        }
        location / {
            limit_req zone=api_low burst=50;
            limit_conn conn_limit 20;
            proxy_pass http://backend;
        }
    }
}
# 全局总限流(共享100r/s)
limit_req_zone $server_name zone=global_limit:10m rate=100r/s;

location /api/ {
    limit_req zone=global_limit;  # 所有IP共享100请求/秒
}

企业级API管理:Crabc低代码平台接口限流功能深度体验与性能测试 本文深入探讨了Crabc低代码平台的接口限流功能,通过架构解析、实战配置和性能测试,展示了其在企业级API管理中的高效表现。Crabc的可视化配置和分布式流量统计设计,显著提升了系统稳定性和开发效率,特别适合电商秒杀等高并发场景。 阅读详情

相关推荐

框架级多种策略实现接口限流【阅读MallChat频控模块源代码】

通过自定义注解的方式结合多种策略实现框架的接口限流功能

qq_52148082的博客 1522

java app接口代码下载_Java生鲜电商平台-接口限流的技术分析与源代码下载(小程序/APP)...

Java生鲜电商平台-接口限流的技术分析与源代码下载(小程序/APP)说明:在实际的Java生鲜电商平台中,在对外暴露的接口中存在某些人为或者攻击者的恶意调用与攻击,这个时候为了系统的安全,就需要对某些接口进行限流操作,网上的大部分的接口限流都是基于guava或者阿里巴巴的Sentinel,本文只是根据实际的业务出发,采用自定义注解来进行方法限流,满足我们的日常业务的要求。1。阅读本文你需要掌握的...

weixin_28406969的博客 177

SpringBoot项目中如何优雅地使用Guava RateLimiter实现接口限流?附完整代码示例

本文详细介绍了在SpringBoot项目中如何优雅地使用Guava RateLimiter实现接口限流,包括令牌桶算法的核心原理、两种集成模式(直接调用和注解驱动)以及生产环境中的调优策略。通过完整代码示例和实战经验,帮助开发者有效应对高并发场景,保障系统稳定性。

weixin_42525369的博客 298

Crabc低代码平台实战:5分钟搞定接口限流配置(附常见问题排查)

本文详细介绍了如何在Crabc低代码平台上快速配置接口限流,包括基础规则设置、API关联、高级策略优化及常见问题排查。通过可视化操作,开发者可在5分钟内完成限流配置,有效保障系统稳定性,特别适合微服务架构下的API管理需求。

wdx012345的博客 649

maya后台批量比对maya文件层级

在cg制作过程中,为了统一制作规范,提高效率我们Pipeline都会制作一个比对层级的工具下面介绍的是maya利用batch文件进行模型与绑定和材质文件进行比对层级。 直接上代码: #!usr/bin/env python # -*- encoding: utf-8 -*- """ @author:MCC @file: compareUI @time: 2018/11/21 16:29 """ i...

CGpipelineTD 1642

hi3516cv610在PQStream上实现拉出图像,windows和板端操作记录

PQStream拉出图像

weixin_51838255的博客 728

FastAPI 接口限流具体代码示例

FastAPI 接口限流代码示例摘要: 本文提供基于 slowapi 的 FastAPI 接口限流实现方案,包含三种典型场景: 单机基础限流(IP维度): 使用 get_remote_address 获取客户端IP 支持全局默认限流(20次/分钟)和接口级覆盖 自定义429响应格式和重试时间 基于用户ID限流(JWT认证): 结合现有JWT认证体系 以用户ID替代IP作为限流标识 区分公开接口(IP限流)和认证接口(用户ID限流) 分布式限流(Redis支持): 多实例部署时通过Redis共享计数 解决单机

lza_csdn2019的博客 385

SAP中常见的Debug方式

原文链接:https://mp.weixin.qq.com/s/wT4kThFKYV0PQYhCqpXRWg 大家可以关注我个人公众号,所有分享内容,会在公众号第一时间推送,且阅读排版更好。 愿大家的学习,轻松且愉快。 如果大家觉得有用,希望转发关注,谢谢 导读 SAP系统在企业的应用时,都不会只使用标准功能。 通常情况下,基于特殊的行业需求,以及某些业务部门的管理需求等,都会额外开发出一些增强,报表,对话功能,接口等,从而保证系统的正常运转。 标准知识的逻辑,我们...

Kerwin-G的博客 1万+

java接口限流代码_RateLimit-使用guava来做接口限流代码示例

本文主要研究的是ratelimit-使用guava来做接口限流的相关内容,具体如下。一、问题描述某天a君突然发现自己的接口请求量突然涨到之前的10倍,没多久该接口几乎不可使用,并引发连锁反应导致整个系统崩溃。如何应对这种情况呢?生活给了我们答案:比如老式电闸都安装了保险丝,一旦有人使用超大功率的设备,保险丝就会烧断以保护各个电器不被强电流给烧坏。同理我们的接口也需要安装上“保险丝”,以防止非预期的...

weixin_39623805的博客 236

如何利用三阈值游程理论识别干旱事件_python

如果当前时间点与上一个干旱事件的结束位置相隔不超过一个月(`index - current_event['end_index']

weixin_44259522的博客 1945

Star CCM+中的物性参数(定值、多项式、查表)

仿真过程中我们一定会遇到设置物性参数的问题,对于固定的物性参数还好说,直接输入一个固定的值即可。但是对于冷却液、气体、两相流等,物性参数是随着温度或温度和压力变化的。此时就涉及到多项式和查表。首先创建物理连续体,选择计算模型。

2201_75375391的博客 2957

200行代码实现接口限流,探究开源项目eladmin接口限流原理

eladmin的接口限流是如何实现的呢?eladmin的接口限流是如何实现的呢?1、下载eladmin后端项目2、接下来我们用idea打开项目,分析注解3、AOP切入解析注解 eladmin的接口限流是如何实现的呢? 今天闲来无事的时候,看了一下eladmin这个开源项目。发现了其中真的有非常多我们可以借鉴的地方。今天我们就来看看eladmin中接口限流这个小功能是如何实现。可能会对你之后的项目有所帮助。 这里预先给大家说一下他的实现用到了如下技术: 自定义注解 Spring提供的Aop redis+lu

qq_43080270的博客 912

【雷达成像实战】RD、CS、RMA算法对比与Matlab实现:从信号处理到高清成像

本文深入对比了雷达成像中三种核心算法:经典的距离多普勒算法(RD)、基于稀疏重建的压缩感知算法(CS)以及高精度的快速多通道获取算法(RMA)。通过详细的Matlab实战代码,从原理拆解到实现步骤,分析了各自在计算效率、成像精度、数据需求和适用场景上的优劣,为工程选型与算法实践提供了清晰指南。

weixin_29095587的博客 447

关于接口幂等性以及接口防刷限流的代码

package com.wangzaiplus.test.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Targ...

天道酬勤 230

手把手入门YOLO到改进优化教程 | 【P6进阶篇】YOLOv8模型剪枝优化实战-LAMP剪枝

本节首先介绍LAMP剪枝相关理论。然后结合YOLO框架,手把手搭建剪枝工程,包括配置文件修改、剪枝脚本构建等内容。

嵌入式阿齐Archie 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java接口限流_RateLimit-使用guava来做接口限流代码示例

本文主要研究的是RateLimit-使用guava来做接口限流的相关内容,具体如下。一、问题描述某天A君突然发现自己的接口请求量突然涨到之前的10倍,没多久该接口几乎不可使用,并引发连锁反应导致整个系统崩溃。如何应对这种情况呢?生活给了我们答案:比如老式电闸都安装了保险丝,一旦有人使用超大功率的设备,保险丝就会烧断以保护各个电器不被强电流给烧坏。同理我们的接口也需要安装上“保险丝”,以防止非预期的...

weixin_39915308的博客 400

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SpringBoot+Redis实现接口限流 附代码

在这之前对redis一无所知,做的过程都是参考网上的资料,如果有冒犯之处请见谅,整理一下,希望对大家都用。 1.使用maven添加依赖库,本项目中使用的是: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.1.4.R...

各种自助共享门店系统定制开发,美团核销服务商 290

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Go高并发限流实战!20行代码实现令牌桶限流,解决接口雪崩问题

2026年云原生开发岗位,高并发调优、服务防护是核心加分项。原生Go实现限流算法,能帮助开发者深入理解限流底层原理,区别于只会调用第三方库的初级开发者。

2609_96322798的博客 169

【含实现代码】分析SpringBoot常见的接口限流算法优缺点

前言今天分享下–Spring Boot 的接口限流算法优缺点深度分析,欢迎关注!在一个高并发系统中对流量的把控是非常重要的,当巨大的流量直接请求到我们的服务器上没多久就可能造成接口不可用...

qq_18244417的博客 551

【SpringBoot】SpringBoot 接口限流

限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。1. 计数器限流计数器限流算法是最为简单粗暴的解决方案,主要用来限制总并发数,比如数据库连接池大小、线程池大小、接口访问并发数等都是使用计数器算法。如:使用 AomicInteger 来进行统计当前正在并发执行的次数,如果超过域值就直接拒绝请求,提示系统繁忙。2. 漏桶算法漏桶算法思路很简单,我们把水比作是请求,漏桶比作是系统处理能力极限。

大白的成长之路 1488

Redis(四)——Redis 处理接口幂等性(代码实现、两种方式拦截令牌)、Redis 分布式锁(两种引入 lua 脚本、Redission实现分布式锁)、Redis做限流工具(简单限流,限流插件)

Redis(四)——Redis 处理接口幂等性(代码实现、两种方式拦截令牌)、Redis 分布式锁(两种引入 lua 脚本、通过 Redission 实现分布式锁)、Redis做限流工具(简单限流,限流插件——Redis-Cell模块(使用了漏斗算法)、java 代码操作(使用 Lettuce 扩展))

qq_41824825的博客 2619

云原生必备!Go高并发限流实战,50行代码实现企业级接口限流

1. 滑动窗口限流相比固定窗口的优势?答:解决固定窗口临界时间点流量翻倍的问题,限流精度更高,流量控制更平稳。2. 单机限流和分布式限流的区别?答:本文实现的是单机限流,适合单节点服务;集群部署需基于Redis实现分布式限流,保证全局流量统一管控。3. 限流和熔断、降级的区别?答:限流是拦截超额流量,熔断是阻断故障服务调用,降级是主动关闭非核心接口,三者配合实现服务高可用。限流是Go云原生开发、微服务架构的核心基础能力,也是后端面试必考知识点。

2603_96528699的博客 185

SpringBoot实战:用Guava RateLimiter给API接口限流(附完整代码)

本文详细介绍了在SpringBoot项目中集成Guava RateLimiter实现API接口限流的工程化实践。通过令牌桶算法控制请求速率,文章提供了完整的AOP切面、拦截器实现代码,并探讨了动态配置、监控指标、分布式限流等高级特性,帮助开发者构建高可用的API防护层。

weixin_29285605的博客 389
上一篇: 微服务的草稿草稿草稿
下一篇: 构建高可用二级缓存系统
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值