Feat Rate Limit para cuotear peticiones.
This commit is contained in:
@@ -11,6 +11,7 @@ using System.Net.Security;
|
||||
using System.Security.Authentication;
|
||||
using Polly;
|
||||
using Polly.Extensions.Http;
|
||||
using System.Threading.RateLimiting;
|
||||
|
||||
Log.Logger = new LoggerConfiguration()
|
||||
.WriteTo.Console()
|
||||
@@ -81,6 +82,26 @@ builder.Services.AddHttpClient("ElectoralApiClient", client =>
|
||||
|
||||
.AddPolicyHandler(GetRetryPolicy());
|
||||
|
||||
// --- LIMITADOR DE VELOCIDAD BASADO EN TOKEN BUCKET ---
|
||||
builder.Services.AddSingleton<RateLimiter>(sp =>
|
||||
new TokenBucketRateLimiter(new TokenBucketRateLimiterOptions
|
||||
{
|
||||
// El tamaño máximo del cubo (la ráfaga máxima que permitimos).
|
||||
TokenLimit = 50,
|
||||
|
||||
// Con qué frecuencia se añaden nuevas fichas al cubo.
|
||||
ReplenishmentPeriod = TimeSpan.FromSeconds(1),
|
||||
|
||||
// Cuántas fichas se añaden en cada período.
|
||||
TokensPerPeriod = 20,
|
||||
|
||||
// Cuántas peticiones pueden estar en cola esperando una ficha.
|
||||
QueueLimit = 1000,
|
||||
|
||||
// Cómo se comporta cuando la cola está llena.
|
||||
QueueProcessingOrder = QueueProcessingOrder.OldestFirst
|
||||
}));
|
||||
|
||||
builder.Services.AddScoped<IElectoralApiService, ElectoralApiService>();
|
||||
|
||||
builder.Services.AddHostedService<Worker>();
|
||||
|
||||
Reference in New Issue
Block a user