ananiaslitz / resilience
Requires
- leocarmo/circuit-breaker-php: ^5.0
- predis/predis: ^2.3
Requires (Dev)
- mockery/mockery: ^1.6
- phpunit/phpunit: ^11.4
This package is auto-updated.
Last update: 2025-06-11 17:21:46 UTC
README
Uma biblioteca de resiliência para aplicações PHP, inspirada em padrões como Resilience4j, projetada para ser leve, extensível e compatível com qualquer framework.
📌 Desenvolvido com foco em alta disponibilidade, isolamento de falhas e escalabilidade controlada.
✨ Padrões Suportados
- ✅ Circuit Breaker – Abre, fecha e meio-abre com base em falhas controladas.
- ✅ Rate Limiter – Controla a taxa de chamadas por chave (InMemory ou Redis).
- ✅ Bulkhead – Isola blocos de execução com limite de concorrência simultânea.
- 🔜 Retry – Tentativas automáticas com controle de backoff.
- 🔜 Time Limiter – Cancela execuções que excedem o tempo permitido.
🚀 Instalação
composer require sualib/php-resilience
Requer PHP >= 8.1
🧩 Exemplo de Uso
Circuit Breaker
$circuitBreaker = new InMemoryCircuitBreaker('service-a'); try { $circuitBreaker->call(function () { // chamada instável aqui }); } catch (CircuitBreakerOpenException $e) { // fallback }
Rate Limiter (Redis)
$redis = new Redis(); // configure sua conexão $stateManager = new RedisRateLimiterStateManager($redis); $rateLimiter = new RateLimiter( 'api-user-123', 10, // 10 requisições 60, // por 60 segundos $stateManager ); if (!$rateLimiter->tryConsume()) { throw new TooManyRequestsException(); }
Bulkhead
$bulkhead = new InMemoryBulkhead('email-sender', 5); try { $bulkhead->call(fn() => enviarEmail()); } catch (BulkheadFullException $e) { // fallback ou fila }
Testes
Utilize o PHPUnit com Mockery:
composer test
Arquitetura
-
Totalmente orientado a contratos (interfaces).
-
Estado externo (ex: Redis) separado por StateManager.
-
Sem dependência de framework.
-
Pronto para uso em microserviços, APIs REST ou workers assíncronos.
🗺️ Roadmap
✅ Circuit Breaker (InMemory e Redis)
✅ Rate Limiter (InMemory e Redis)
✅ Bulkhead (com timeout ou fila opcional)
✅ Retry com controle de tentativas
✅ TimeLimiter
⬜ Suporte ao Symfony/PSR para middlewares plugáveis
⬜ Observabilidade (handlers de métricas e eventos)