다음을 통해 공유


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

참고 항목