|
.NET Core WebApi接口ip限流实践
前言
之前一直想实现接口限流,但一直没去实现,然后刚好看到一篇文章是基于AspNetCoreRateLimit 组件的限流策略。这个组件不做多的介绍,想了解详情可以去访问官方网址或者原文地址,地址在文章底部,本文只讲实现。
实现接口限流步骤
导包
第一步 配置服务
由于需要再appsettings.json中去读取数据,所以需要在Program.cs配置文件中配置服务- builder.Services.AddOptions();
复制代码 第二步 写一个扩展方法注册RateLimit相关服务
- using StackExchange.Redis;
- using AspNetCoreRateLimit;
- using AspNetCoreRateLimit.Redis;
- namespace AspNetCoreRate
- {
- public static class ConfigureRateLimit
- {
- public static void AddRateLimit(this IServiceCollection services,IConfiguration conf)
- {
- services.Configure<IpRateLimitOptions>(conf.GetSection("IpRateLimiting"));
- // 注册 Redis 缓存服务
- services.AddStackExchangeRedisCache(options =>
- {
- options.Configuration = conf.GetConnectionString("Redis");
- });
- // 注册 Redis 连接服务
- var redisOptions = ConfigurationOptions.Parse(conf.GetConnectionString("Redis"));
- redisOptions.Password = "密码";
- services.AddSingleton<IConnectionMultiplexer>(provider =>
- {
- return ConnectionMultiplexer.Connect(redisOptions);
- });
- services.AddRedisRateLimiting();
- services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
- }
- public static IApplicationBuilder UseRateLimit(this IApplicationBuilder app)
- {
- app.UseIpRateLimiting();
- return app;
- }
- }
- }
复制代码 第三步 注册服务
- //注册服务
- builder.Services.AddRateLimit(builder.Configuration);
- //将内存缓存服务注册到依赖注入容器中,可写可不写。
- //builder.Services.AddDistributedMemoryCache();
复制代码 builder.Services.AddDistributedMemoryCache();这个服务,看看chatGPT的回答
如果你不想使用内存缓存,也可以直接移除AddDistributedMemoryCache()服务的注册。在你的Startup.cs文件中,找到ConfigureServices方法,注释掉或者删除以下代码:- services.AddDistributedMemoryCache();
复制代码 这样就可以移除内存缓存服务的注册了。不过,需要注意的是,如果你的Redis出现问题,应用程序将无法使用备用缓存,这可能会影响应用程序的性能和可用性。因此,建议你在使用Redis作为分布式缓存时,仍然注册AddDistributedMemoryCache()服务。
来源:https://www.cnblogs.com/ZYPLJ/archive/2023/03/22/17243389.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|