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:
@@ -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>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user