ConcurrencyLimiterMiddleware는 더 이상 사용되지 않음
ConcurrencyLimiterMiddleware 및 관련 메서드와 형식은 더 이상 사용되지 않는 것으로 표시되었습니다.
속도 제한 기능이 필요한 경우 .NET 7에 도입된 더 새롭고 성능이 뛰어난 속도 제한 미들웨어(예: RateLimiterApplicationBuilderExtensions.UseRateLimiter)로 전환합니다. .NET 7 속도 제한 API에는 애플리케이션에 적용할 수 있는 동시성 제한기와 기타 여러 속도 제한 알고리즘이 포함되어 있습니다.
도입된 버전
ASP.NET Core 8.0 미리 보기 4
이전 동작
개발자는 DI(종속성 주입)에 정책을 추가하고 미들웨어를 사용하도록 설정하여 ConcurrencyLimiterMiddleware를 사용해 동시성을 제어할 수 있습니다.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddStackPolicy<options => {
options.MaxConcurrentRequests = 2;
options.RequestQueueLimit = 25;
});
var app = builder.Build();
app.UseConcurrencyLimiter();
// Map endpoints.
app.Run();
새 동작
코드에서 영향을 가져오는 API를 사용하는 경우 컴파일 시 경고 CS0618
이 표시됩니다.
호환성이 손상되는 변경의 형식
이 변경 내용은 원본 호환성에 영향을 미칩니다.
변경 이유
ConcurrencyLimiterMiddleware는 자주 사용되지 않으며 문서화되지 않았습니다. 최신 속도 제한 API에는 더 광범위한 기능이 있습니다.
권장 작업
이전 ConcurrencyLimiterMiddleware를 사용하는 경우 최신 속도 제한 미들웨어로 이동하는 것이 좋습니다. 다음은 최신 API인 RateLimiterApplicationBuilderExtensions.UseRateLimiter의 사용 예입니다.
using Microsoft.AspNetCore.RateLimiting;
using System.Threading.RateLimiting;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseRateLimiter(new RateLimiterOptions()
.AddConcurrencyLimiter("only-one-at-a-time-stacked", (options) =>
{
options.PermitLimit = 2;
options.QueueLimit = 25;
options.QueueProcessingOrder = QueueProcessingOrder.NewestFirst;
}));
app.MapGet("/", async () =>
{
await Task.Delay(10000);
return "Hello World";
}).RequireRateLimiting("only-one-at-a-time-stacked");
app.Run();
영향을 받는 API
- Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiter(IApplicationBuilder)
- Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddleware
- System.Threading.RateLimiting.ConcurrencyLimiterOptions
참고 항목
.NET