Ultimate ASP.NET CORE 6.0 Web API --- 读书笔记(26)

26 Rate Limiting And Throttling

本文内容来自书籍: Marinko Spasojevic - Ultimate ASP.NET Core Web API - From Zero To Six-Figure Backend Developer (2nd edition)

速度限制允许我们去保护我们的API不被过多的请求压垮

API会拒绝超出限制的请求,而节流会将超出的请求放入队列等待后续处理,如果经过一定次数的尝试处理之后,还是不能处理,最终会拒绝请求

我们在响应头中添加关于速度限制的信息

在允许访问的前提下,有如下信息

  • X-Rate-Limit-Limit,限制的区间
  • X-Rate-Limit-Remaining,剩下的请求数
  • X-Rate-Limit-Reset,重置限制请求数的日期

如果不允许访问之后,会返回429 Too Many Requests状态码

26.1 Implementing Rate Limiting

使用包AspNetCoreRateLimit实现速度限制,安装在主项目

然后老规矩,注册服务,而且,这个服务,需要使用内存来存储计数和规则,所以也需要添加MemoryCache服务

配置包含了限制的规则rule,请求被允许访问所有端点在5分钟的区间里面,然后注册规则、存储、配置、处理策略,这些注册的服务目的是为了存储速度限制的计数器和策略以及添加配置

builder.Services.AddMemoryCache();

public static void ConfigureRateLimitingOptions(this IServiceCollection services)
{
    var rateLimitRules = new List<RateLimitRule>
    {
        new()
        {
            Endpoint = "*",
            Limit = 3,
            Period = "5m"
        }
    };
    services.Configure<IpRateLimitOptions>(opt => opt.GeneralRules = rateLimitRules);
    services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
    services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
    services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
    services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();
}

builder.Services.ConfigureRateLimitingOptions();
builder.Services.AddHttpContextAccessor();

app.UseIpRateLimiting();

除了上面的配置之外,还有很多的配置参数,可以在这个包的Github上查看

posted @   huang1993  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示