我觉得此项目开源的初衷在于,支持.Net开源生态的发展。让我康康谁还说.Net没生态的😎
YuanRateLimiter是一个Asp.Net Core的限流中间件。如果你项目不想采用国外的限流组件那就可以参考此项目或者直接使用,配置灵活:通过appsettings.json文件配置,支持全接口限流、Method限流、Action接口限流。支持令牌桶限流、漏桶限流、滑动窗口限流。默认采用基于Redis的令牌桶算法,支持Redis和MemoryCache的无缝切换。正在集成其他限流算法。采用NewLife.Redis高性能Redis客户端组件。核心代码注释覆盖率>90%。值得注意的是NET 7/8自带了完善的限流中间件,友情链接:ASP.NET Core 中的速率限制中间件 | Microsoft Learn。如果你是NET 7/8及以上开发的项目,请使用NET 7/8自带的限流中间件。温馨提示:该项目暂未开发成熟,请勿直接用于生产项目。
v2.3.3
v2.3.2(忘记加滑动窗口的限流规则了)
v2.2.1
v2.1.0
v2.0.0
v1.1.1【弃用】
v1.1.0【弃用】
v1.0.2【弃用】
NuGet安装
NuGet\Install-Package YuanRateLimiter -Version 2.3.3
使用
NET Core 6
// 注册限流中间件
// 使用Redis:
builder.Services.AddRateLimiterSetUp(
builder.Configuration["Redis连接字符串"],
config => builder.Configuration.GetSection("RateLimiter配置节点").Get<RateLimitingConfig>());
// 使用MemoryCache:
builder.Services.AddRateLimiterSetUp(
config => builder.Configuration.GetSection("RateLimiter配置节点").Get<RateLimitingConfig>());
// 使用限流中间件
app.UseRateLimitMiddleware();
NET Core 5 及以下
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
// 使用Redis:
services.AddRateLimiterSetUp(
config => Configuration.GetSection("RateLimiter").Get<RateLimiterConfig>(),
Configuration["RedisConfig:Default:ConnectionString"]);
// 使用MemoryCache:
//services.AddRateLimiterSetUp(
// config => Configuration.GetSection("RateLimiter").Get<RateLimiterConfig>());
// 其他代码....
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 其他代码....
app.UseRouting();
// 使用限流中间件
app.UseRateLimitMiddleware();
// 其他代码....
}
}
appsettings.json文件示例
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"RedisConfig": {
"Default": {
"ConnectionString": "127.0.0.1:6379,password=ydmkj.com.Redis,DefaultDatabase=0,connectTimeout=3000,connectRetry=1,syncTimeout=10000"
}
},
// 限流配置
"RateLimiter": {
"EnableRateLimiter": true, // 是否开启限流
"HttpStatusCode": 429, // 限流状态码,可以不配置,默认429
"LimitingMessage": "请求过于频繁,请稍后再试。", // 触发限流的提示消息,可以不配置,默认此文本的英文
"CacheKey": "RateLimiterKey", // 缓存Key,可以不配置,默认RateLimiterKey
"RateLimiterModel": "TokenBucket", // 使用的限流算法模型(TokenBucket、LeakBucket、SlidingWindow),默认令牌桶算法(TokenBucket)
"EnableIpLimiter": true, // 是否启用Ip限流
//"IpWhiteList": [ "127.0.0.1", "0.0.0.1" ], // 限流Ip白名单
"IpWhiteList": [], // 限流Ip白名单
"IpBlackList": [ "122.189.37.201" ], // 限流Ip黑名单
"RateLimiterRule": {
"RateLimiterLogLevel": "All", // 限流级别:Action、Method、All,默认All
"AllFlowLimiterRule": {
"Capacity": 10, // 容量
"RateLimit": 2, // 速率(QPS)
"WindowSize": 10, // 窗口大小
"MaxRequests": 10 // 最大请求数
},
// "MethodFlowLimiterRules": [
// {
// "Method": "GET",
// "Capacity": 10,
// "RateLimit": 1
// },
// {
// "Method": "PUT",
// "Capacity": 15,
// "RateLimit": 1
// }
// ],
// "ActionFlowLimiterRules": [
// {
// "Path": "/api/Test/Test01",
// "Capacity": 10,
// "RateLimit": 2
// },
// {
// "Path": "/api/Test/Test03",
// "Capacity": 1000,
// "RateLimit": 1
// }
// ]
}
}
}
API限流:
我们团队(元代码科技工作室)专业从事软件开发、网站开发等多个领域。如果您有以下需求,欢迎与我们联系:
我们团队(元代码科技工作室)的主要技术栈:.Net 、Vue、Java、鸿蒙等
我们提供高质量的开发服务,所有项目单子,均为源码交付。大金额单子需要签订合同
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。