.NET - RateLimiter

1.简单介绍

RateLimit其实是.NET7引入的一个特性,可以实现对请求的速率限制

2.实现

2.1 AddRateLimiter

builder.Services.AddRateLimiter(configureOptions =>
{
    configureOptions.AddFixedWindowLimiter("fixed", options =>
    {
        options.QueueLimit = 2;
        options.Window = TimeSpan.FromSeconds(10);
        options.QueueProcessingOrder = System.Threading.RateLimiting.QueueProcessingOrder.OldestFirst;
        options.PermitLimit = 5;

    });
                
    //.AddSlidingWindowLimiter("sliding", options =>
    //{
    //    options.PermitLimit = myOptions.SlidingPermitLimit;
    //    options.Window = TimeSpan.FromSeconds(myOptions.Window);
    //    options.SegmentsPerWindow = myOptions.SegmentsPerWindow;
    //    options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    //    options.QueueLimit = myOptions.QueueLimit;
    //});
});

添加RateLimiter到容器 - AddRateLimiter()

既可以实现AddFixedWindowLimiter()固定时间窗口,

也可以使用AddSlidingWindowLimiter()滑动时间窗口

2.2 UseRateLimiter 

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseRateLimiter();

2.3 应用RateLimiter

2.3.1 全局配置RateLimiter
app.MapControllers().RequireRateLimiting("fixed");
2.3.2 应用于特定的Controller
[EnableRateLimiting("fixed")]
public class RateLimitTestController : ControllerBase

note, 也可以将attribute[EnableRateLimiter("fixed")]配置到action上

2.4 DisableRateLimiting

既可以应用于Controller,

[DisableRateLimiting]
public class RateLimitTestController : ControllerBase

也可以应用于特定Action

[DisableRateLimiting]
public async Task<IEnumerable<string>> GetStudentNames()
{}

3.总结

以上简单介绍了一下.NET中的RateLimiter。

如果哪里有错误的地方,麻烦告之,谢谢谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值