feat(rate-limiting): Implement core rate limiting functionality with configuration, decision-making, metrics, middleware, and service registration

- Add RateLimitConfig for configuration management with YAML binding support.
- Introduce RateLimitDecision to encapsulate the result of rate limit checks.
- Implement RateLimitMetrics for OpenTelemetry metrics tracking.
- Create RateLimitMiddleware for enforcing rate limits on incoming requests.
- Develop RateLimitService to orchestrate instance and environment rate limit checks.
- Add RateLimitServiceCollectionExtensions for dependency injection registration.
This commit is contained in:
master
2025-12-17 18:02:37 +02:00
parent 394b57f6bf
commit 8bbfe4d2d2
211 changed files with 47179 additions and 1590 deletions

View File

@@ -1,5 +1,6 @@
using StellaOps.Router.Gateway.Middleware;
using StellaOps.Router.Gateway.OpenApi;
using StellaOps.Router.Gateway.RateLimit;
namespace StellaOps.Router.Gateway;
@@ -18,6 +19,9 @@ public static class ApplicationBuilderExtensions
// Enforce payload limits first
app.UseMiddleware<PayloadLimitsMiddleware>();
// Rate limiting (Sprint 1200_001_001)
app.UseRateLimiting();
// Resolve endpoints from routing state
app.UseMiddleware<EndpointResolutionMiddleware>();
@@ -30,6 +34,24 @@ public static class ApplicationBuilderExtensions
return app;
}
/// <summary>
/// Adds rate limiting middleware to the pipeline.
/// Sprint: SPRINT_1200_001_001_router_rate_limiting_core
/// Task: 1.6 - Wire into Router Pipeline
/// </summary>
/// <param name="app">The application builder.</param>
/// <returns>The application builder for chaining.</returns>
public static IApplicationBuilder UseRateLimiting(this IApplicationBuilder app)
{
// Only add if rate limit service is registered
var rateLimitService = app.ApplicationServices.GetService<RateLimitService>();
if (rateLimitService is not null)
{
app.UseMiddleware<RateLimitMiddleware>();
}
return app;
}
/// <summary>
/// Adds the router gateway middleware pipeline without payload limiting.
/// </summary>
@@ -37,6 +59,9 @@ public static class ApplicationBuilderExtensions
/// <returns>The application builder for chaining.</returns>
public static IApplicationBuilder UseRouterGatewayCore(this IApplicationBuilder app)
{
// Rate limiting (Sprint 1200_001_001)
app.UseRateLimiting();
// Resolve endpoints from routing state
app.UseMiddleware<EndpointResolutionMiddleware>();