Udostępnij za pośrednictwem


ConcurrencyLimiterMiddleware jest przestarzałe

ConcurrencyLimiterMiddleware i skojarzone z nimi metody i typy zostały oznaczone jako przestarzałe.

Jeśli potrzebujesz możliwości ograniczania szybkości, przejdź do nowszego i bardziej zdolnego oprogramowania pośredniczącego, które zostało wprowadzone na platformie .NET 7 (na przykład RateLimiterApplicationBuilderExtensions.UseRateLimiter). Interfejs API ograniczania szybkości platformy .NET 7 zawiera ogranicznik współbieżności i kilka innych algorytmów ograniczania szybkości, które można zastosować do aplikacji.

Wprowadzona wersja

ASP.NET Core 8.0 (wersja zapoznawcza 4)

Poprzednie zachowanie

Deweloperzy mogą kontrolować ConcurrencyLimiterMiddleware współbieżność, dodając zasady do wstrzykiwania zależności (DI) i włączając oprogramowanie pośredniczące:

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();

Nowe zachowanie

Jeśli używasz interfejsów API, których dotyczy problem w kodzie, w czasie kompilacji zostanie wyświetlone ostrzeżenie CS0618 .

Typ zmiany powodującej niezgodność

Ta zmiana ma wpływ na zgodność ze źródłem.

Przyczyna wprowadzenia zmiany

ConcurrencyLimiterMiddleware jest rzadko używany i nieudokumentowany. Nowszy interfejs API ograniczania szybkości ma bardziej rozbudowane funkcje.

Jeśli używasz starszego ConcurrencyLimiterMiddlewareprogramu , zalecamy przejście do nowszego oprogramowania pośredniczącego ograniczającego szybkość. Oto przykład użycia nowszego interfejsu 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();

Dotyczy interfejsów API

Zobacz też