Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O pacote Microsoft.AspNetCore.ConcurrencyLimiter e o seu middleware foram removidos do ASP.NET Core 11. O middleware foi marcado como obsoleto no ASP.NET Core 8 em favor do middleware de limitação de taxa (Microsoft.AspNetCore.RateLimiting), que expõe a funcionalidade equivalente de limitação de concorrência por meio de System.Threading.RateLimiting.
Versão introduzida
.NET 11 Prévia 1
Comportamento anterior
Anteriormente, podia instalar o pacote NuGet Microsoft.AspNetCore.ConcurrencyLimiter e usar o método de extensão UseConcurrencyLimiter juntamente com uma das políticas de fila (AddQueuePolicy ou AddStackPolicy) para limitar quantos pedidos podiam ser executados simultaneamente:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.ConcurrencyLimiter;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddQueuePolicy(options =>
{
options.MaxConcurrentRequests = 2;
options.RequestQueueLimit = 25;
});
var app = builder.Build();
app.UseConcurrencyLimiter();
app.Run(async context => await context.Response.WriteAsync("Hello World!"));
app.Run();
O middleware emitia um aviso de compilação que te direcionava para o middleware limitador de velocidade, mas continuava a funcionar em tempo de execução.
Novo comportamento
A partir de ASP.NET Core 11, a fonte de middleware Microsoft.AspNetCore.ConcurrencyLimiter é removida do repositório ASP.NET Core, e nenhum pacote Microsoft.AspNetCore.ConcurrencyLimiter 11.x ou posterior é publicado. Os seguintes tipos e métodos já não estão disponíveis para aplicações que visam net11.0:
Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddlewareMicrosoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterOptionsMicrosoft.AspNetCore.ConcurrencyLimiter.IQueuePolicyMicrosoft.AspNetCore.ConcurrencyLimiter.QueuePolicyOptions-
Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions(incluindo o método de extensãoUseConcurrencyLimiter) -
Microsoft.Extensions.DependencyInjection.QueuePolicyServiceCollectionExtensions(incluindoAddQueuePolicyeAddStackPolicy)
As versões existentes dos pacotes 9.x e 10.x permanecem no NuGet e continuam a funcionar para projetos que ainda têm como objetivo net9.0 ou net10.0. Projetos que especificam explicitamente PackageReference e redirecionam para net11.0 geram um erro de restauro de pacotes do NuGet, porque não existe uma versão 11.x do pacote. O código que faz referência a estes tipos falha em compilar contra o ASP.NET Core 11.
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade binária e a compatibilidade de origem.
Motivo da mudança
O middleware ConcurrencyLimiter foi considerado obsoleto em ASP.NET Core 8 (diagnóstico ASP0025) porque a sua funcionalidade é coberta pelo middleware limitador de velocidade, que é construído sobre as APIs mais gerais System.Threading.RateLimiting. Manter duas implementações paralelas acrescenta atrito sem benefício. Para mais informações, consulte dotnet/aspnetcore#64020.
Ação recomendada
Migre para o middleware de limitação de taxa, que fornece um limitador de concorrência equivalente construído em System.Threading.RateLimiting.ConcurrencyLimiter:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System.Threading.RateLimiting;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRateLimiter(options =>
{
options.AddConcurrencyLimiter("ConcurrencyPolicy", limiterOptions =>
{
limiterOptions.PermitLimit = 2;
limiterOptions.QueueLimit = 25;
limiterOptions.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
});
});
var app = builder.Build();
app.UseRateLimiter();
app.MapGet("/", () => "Hello World!").RequireRateLimiting("ConcurrencyPolicy");
app.Run();
Se não conseguires migrar imediatamente, podes manter-te num pacote Microsoft.AspNetCore.ConcurrencyLimiter 9.x ou 10.x NuGet enquanto tiveres net11.0 como destino. Nenhuma nova versão do pacote será enviada para .NET 11 ou posteriores.
APIs afetadas
Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddlewareMicrosoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterOptionsMicrosoft.AspNetCore.ConcurrencyLimiter.IQueuePolicyMicrosoft.AspNetCore.ConcurrencyLimiter.QueuePolicyOptionsMicrosoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiterMicrosoft.Extensions.DependencyInjection.QueuePolicyServiceCollectionExtensions.AddQueuePolicyMicrosoft.Extensions.DependencyInjection.QueuePolicyServiceCollectionExtensions.AddStackPolicy