Um API Gateway robusto implementado em Java com Spring Cloud Gateway, oferecendo recursos avançados de rate limiting e proteção contra sobrecarga.
- Rate Limiting: Limita o número de requisições por IP ou por usuário
- Circuit Breaker: Previne falhas em cascata quando serviços downstream estão instáveis
- Métricas e Monitoramento: Integrado com Prometheus para visualização de métricas
- Headers de Rate Limit: Fornece informações de limites via HTTP headers
- Diferentes Políticas de Limites: Configuração de diferentes limites por rota
- Java 17
- Spring Boot 3.2
- Spring Cloud Gateway
- Redis para armazenamento distribuído
- Bucket4j para algoritmos de rate limiting
- Resilience4j para circuit breaking
- Micrometer e Prometheus para métricas
- Java 17 ou superior
- Maven 3.6 ou superior
- Redis (opcional, pode ser executado via Docker)
docker run -d -p 6379:6379 --name redis redismvn clean package
java -jar target/api-gateway-rate-limiter-0.0.1-SNAPSHOT.jarA configuração do gateway está no arquivo application.yml. Você pode personalizar:
- Rotas e predicados
- Limites de requisições
- Tempos de circuit breaking
- Endpoints para métricas e monitoramento
O gateway está configurado para encaminhar para o serviço httpbin.org para demonstração:
- GET http://localhost:8080/get - Rate limit: 1 req/s com burst de 3
- POST http://localhost:8080/post - Rate limit: 1 req/s com burst de 2
- GET http://localhost:8080/delay/3 - Com circuit breaker e rate limit
Métricas estão disponíveis no formato Prometheus:
O gateway adiciona os seguintes headers às respostas:
X-RateLimit-Limit: Número máximo de requisições permitidas em um períodoX-RateLimit-Remaining: Número de requisições restantes no período atualX-RateLimit-Retry-After: Segundos até que novas requisições sejam permitidas (quando limitado)
Este gateway foi projetado para ser escalável:
- Pode ser executado em múltiplas instâncias com Redis para compartilhar estado
- Suporta grandes volumes de tráfego com baixa latência
- Monitoramento permite identificar gargalos e otimizar configurações
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou enviar pull requests.
MIT