mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 18:13:26 +08:00
【调整】移除第三方AspNetCoreRateLimit限流组件,使用.net8自带的RateLimiter特性。
This commit is contained in:
@@ -14,12 +14,14 @@ using Microsoft.Extensions.Logging;
|
||||
using NLog.Web;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.RateLimiting;
|
||||
using CoreCms.Net.Auth;
|
||||
using CoreCms.Net.Core.AutoFac;
|
||||
using CoreCms.Net.Core.Config;
|
||||
using CoreCms.Net.Filter;
|
||||
using CoreCms.Net.Mapping;
|
||||
using CoreCms.Net.Middlewares;
|
||||
using CoreCms.Net.Model.ViewModels.Options;
|
||||
using CoreCms.Net.Swagger;
|
||||
using CoreCms.Net.Utility;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
@@ -27,6 +29,8 @@ using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using Yitter.IdGenerator;
|
||||
using LogLevel = NLog.LogLevel;
|
||||
using Microsoft.AspNetCore.RateLimiting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
@@ -61,9 +65,6 @@ builder.Services.Configure<CoreCms.Net.WeChat.Service.Options.WeChatOptions>(bui
|
||||
builder.Services.AddHttpClient();
|
||||
builder.Services.AddSingleton<CoreCms.Net.WeChat.Service.HttpClients.IWeChatApiHttpClientFactory, CoreCms.Net.WeChat.Service.HttpClients.WeChatApiHttpClientFactory>();
|
||||
|
||||
//启用客户端IP限制速率
|
||||
builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);
|
||||
|
||||
//Swagger接口文档注入
|
||||
builder.Services.AddAdminSwaggerSetup();
|
||||
|
||||
@@ -76,15 +77,6 @@ builder.Services.AddHttpContextSetup();
|
||||
//服务配置中加入AutoFac控制器替换规则。
|
||||
builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
|
||||
|
||||
//并发限制-使用队列策略模式
|
||||
builder.Services.AddQueuePolicy(options =>
|
||||
{
|
||||
//最大并发请求数,超过之后,进行排队
|
||||
options.MaxConcurrentRequests = AppSettingsConstVars.MiddlewareConcurrencyLimiterMaxConcurrentRequests;
|
||||
//最大请求数,超过之后,返回503
|
||||
options.RequestQueueLimit = AppSettingsConstVars.MiddlewareConcurrencyLimiterRequestQueueLimit;
|
||||
});
|
||||
|
||||
//注册mvc,注册razor引擎视图
|
||||
builder.Services.AddMvc(options =>
|
||||
{
|
||||
@@ -109,6 +101,24 @@ builder.Services.AddMvc(options =>
|
||||
p.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
|
||||
});
|
||||
|
||||
|
||||
//调用 AddRateLimiter 来将速率限制服务添加到服务集合
|
||||
builder.Services.Configure<MyRateLimitOptions>(builder.Configuration.GetSection(MyRateLimitOptions.MyRateLimit));
|
||||
|
||||
var myOptions = new MyRateLimitOptions();
|
||||
builder.Configuration.GetSection(MyRateLimitOptions.MyRateLimit).Bind(myOptions);
|
||||
var fixedPolicy = "fixed";
|
||||
|
||||
builder.Services.AddRateLimiter(_ => _
|
||||
.AddFixedWindowLimiter(policyName: fixedPolicy, options =>
|
||||
{
|
||||
options.PermitLimit = myOptions.PermitLimit;
|
||||
//options.Window = TimeSpan.FromSeconds(myOptions.Window); //不走窗口限制了。直接走请求数限制。
|
||||
options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
|
||||
options.QueueLimit = myOptions.QueueLimit;
|
||||
}));
|
||||
|
||||
|
||||
// 雪花漂移算法
|
||||
// 创建 IdGeneratorOptions 对象,请在构造函数中输入 WorkerId:
|
||||
var options = new IdGeneratorOptions(1);
|
||||
@@ -160,10 +170,8 @@ app.UseForwardedHeaders(new ForwardedHeadersOptions
|
||||
#region 中间件注册===================================================================
|
||||
// 获取用户访问真实ip
|
||||
app.RealIpMiddleware();
|
||||
// 启用并发限制数中间件
|
||||
app.UseConcurrencyLimiter();
|
||||
// 开启Ip限流
|
||||
app.UseIpLimitMiddle();
|
||||
// 启用速率限制中间件
|
||||
app.UseRateLimiter();
|
||||
// 记录请求与返回数据 (注意开启权限,不然本地无法写入)
|
||||
app.UseRequestResponseLog();
|
||||
// 用户访问记录(必须放到外层,不然如果遇到异常,会报错,因为不能返回流)(注意开启权限,不然本地无法写入)
|
||||
|
||||
Reference in New Issue
Block a user