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, alterne para o middleware de limitação de taxa mais recente e mais capaz que foi 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 você pode aplicar ao seu aplicativo.
Versão introduzida
ASP.NET Core 8.0 Preview 4
Comportamento anterior
Os desenvolvedores podem usar ConcurrencyLimiterMiddleware para controlar a simultaneidade adicionando uma política à injeção de dependência (DI) 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á um aviso CS0618
no momento da compilação.
Tipo de mudança de rutura
Essa alteração afeta a compatibilidade da fonte.
Razão para a alteração
ConcurrencyLimiterMiddleware é pouco utilizada e não documentada. A API de limitação de taxa mais recente tem uma funcionalidade mais extensa.
Ação recomendada
Se você estiver usando o mais antigo ConcurrencyLimiterMiddleware, recomendamos mudar para o middleware de limitação de taxa mais recente. Aqui está 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
- Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiter(IApplicationBuilder)
- Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddleware
- System.Threading.RateLimiting.ConcurrencyLimiterOptions