ConcurrencyLimiterMiddleware が廃止されました

ConcurrencyLimiterMiddleware およびその関連するメソッドと型は、廃止としてマークされました。

レート制限機能が必要な場合は、.NET 7 に導入されているより新しく、より能力の高いレート制限ミドルウェア (RateLimiterApplicationBuilderExtensions.UseRateLimiter など) に切り替えてください。 .NET 7 レート制限 API には、コンカレンシー リミッターと、アプリケーションに適用できる他のいくつかのレート制限アルゴリズムが含まれています。

導入されたバージョン

ASP.NET Core 8.0 Preview 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

関連項目