Compartilhar via


ConcurrencyLimiterMiddleware está obsoleto

ConcurrencyLimiterMiddleware e os métodos e tipos associados foram marcados como obsoletos.

Se você precisar de recursos de limitação de taxa, mude para o middleware mais recente e mais capaz de limitar a taxa introduzido no .NET 7 (por exemplo, RateLimiterApplicationBuilderExtensions.UseRateLimiter). A API de limitação de taxa do .NET 7 inclui um limitador de simultaneidade e vários outros algoritmos de limitação de taxa que podem ser aplicados ao seu aplicativo.

Versão introduzida

ASP.NET Core 8.0, versão prévia 4

Comportamento anterior

Os desenvolvedores podiam usar ConcurrencyLimiterMiddleware para controlar a simultaneidade adicionando uma política à DI (injeção de dependência) e habilitando o middleware:

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

Novo comportamento

Se você usar as APIs afetadas em seu código, receberá o aviso CS0618 em tempo de compilação.

Tipo de alteração interruptiva

Essa alteração afeta a compatibilidade de origem.

Motivo da alteração

ConcurrencyLimiterMiddleware raramente é usado e não é documentado. A API de limitação de taxa mais recente tem uma funcionalidade mais ampla.

Se você está usando o ConcurrencyLimiterMiddleware mais antigo, recomendamos migrar para o middleware com limitação de taxa mais recente. Este é um exemplo de uso da API mais recente, 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();

APIs afetadas

Confira também