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。
如果哪里有错误的地方,麻烦告之,谢谢谢谢!