Feat Rate Limit para cuotear peticiones.

This commit is contained in:
2025-08-20 14:17:25 -03:00
parent 68dce9415e
commit 9d5c2086c5
12 changed files with 345 additions and 142 deletions

View File

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