resilience4u / r4php
Resilience toolkit (Retry, CircuitBreaker, RateLimiter, etc.) com DX unificada, embrulhando libs maduras.
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/resilience4u/r4php
Requires
- php: ^8.1
- ackintosh/ganesha: ^1.0
- stechstudio/backoff: ^1.6
- symfony/rate-limiter: ^6.4 || ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.5
This package is auto-updated.
Last update: 2025-10-28 21:48:01 UTC
README
R4PHP é a biblioteca da família Resilience4u para o ecossistema PHP — um conjunto de políticas de resiliência (Retry, Circuit Breaker, Bulkhead, Time Limiter, Rate Limiter) inspiradas no Resilience4j.
🚀 Visão geral
O R4PHP fornece uma API simples e extensível para aplicar políticas de resiliência a qualquer operação crítica do seu sistema — chamadas HTTP, queries, integrações externas, filas, etc.
Com ele, você pode:
- Controlar quantas execuções simultâneas são permitidas (
Bulkhead) - Repetir operações com falha (
Retry) - Interromper fluxos quando uma dependência externa estiver instável (
Circuit Breaker) - Limitar o tempo máximo de execução (
Time Limiter) - Restringir taxa de requisições (
Rate Limiter) - Compor todas as políticas em cadeia, aplicadas de forma declarativa via
Factory::fromConfig()
📦 Instalação
composer require resilience4u/r4php
🧩 Políticas disponíveis
| Policy | Classe | Descrição | Dependência |
|---|---|---|---|
RetryPolicy |
Resiliente\R4PHP\Policies\RetryPolicy |
Repete operações com backoff exponencial ou constante | sts/backoff |
CircuitBreakerPolicy |
Resiliente\R4PHP\Policies\CircuitBreakerPolicy |
Abre/fecha circuitos com thresholds configuráveis | ackintosh/ganesha |
BulkheadPolicy |
Resiliente\R4PHP\Policies\BulkheadPolicy |
Limita execuções simultâneas | nativo |
RateLimiterPolicy |
Resiliente\R4PHP\Policies\RateLimiterPolicy |
Controla taxa de requisições por segundo | symfony/rate-limiter |
TimeLimiterPolicy |
Resiliente\R4PHP\Policies\TimeLimiterPolicy |
Interrompe operações que excedem o tempo máximo | nativo |
⚙️ Uso básico
use Resiliente\R4PHP\Contracts\Executable; use Resiliente\R4PHP\Core\Config; use Resiliente\R4PHP\Core\Factory; require __DIR__ . '/../vendor/autoload.php'; // Define as políticas $cfg = Config::fromArray([ 'rateLimiter' => ['tokensPerSecond' => 20, 'limit' => 40], 'bulkhead' => ['maxConcurrent' => 32], 'timeLimiter' => ['timeoutMs' => 1500], 'retry' => [ 'maxAttempts' => 5, 'initialMs' => 200, 'maxMs' => 3000, 'multiplier' => 2.0, 'jitter' => true ], 'circuitBreaker' => [ 'name' => 'core', 'failureRatePct' => 50, 'minSamples' => 10, 'openMs' => 30000, 'timeWindowSec' => 10, ], ]); $policy = Factory::fromConfig($cfg); // Executa uma operação resiliente $result = $policy->execute(new class implements Executable { public function __invoke(): mixed { if (random_int(0, 1)) { throw new \RuntimeException('falhou'); } return "ok"; } }); echo $result, PHP_EOL;
🌐 Integração com Guzzle
O R4PHP inclui middleware pronto para o Guzzle HTTP Client:
use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; use Resiliente\R4PHP\Core\Factory; use Resiliente\R4PHP\Core\Config; use Resiliente\R4PHP\Integrations\Guzzle\R4Middleware; require __DIR__ . '/../vendor/autoload.php'; $policy = Factory::fromConfig(Config::fromArray([ 'retry' => ['maxAttempts' => 3, 'initialMs' => 100, 'maxMs' => 500], 'circuitBreaker' => [ 'name' => 'http', 'failureRatePct' => 50, 'minSamples' => 4, 'openMs' => 5000, 'timeWindowSec' => 5, ], ])); $stack = HandlerStack::create(); $stack->push(R4Middleware::wrap($policy)); $client = new Client([ 'base_uri' => 'http://httpbin:8080', 'handler' => $stack, 'timeout' => 3.0, ]); $response = $client->get('/status/200'); echo $response->getStatusCode(), PHP_EOL;
🧠 Design
O design segue princípios inspirados em Resilience4j:
- Cada política implementa
Resiliente\R4PHP\Contracts\Policy - Operações encapsulam a execução via
Executable - As políticas podem ser compostas dinamicamente via
Factory - Suporte a configuração declarativa (
Config::fromArrayou YAML/JSON)
🧪 Testes
Para executar a suíte de testes (PHPUnit):
composer install
composer test
🗺️ Roadmap
- Policy: Fallback
- Policy: Cache / Result Caching
- Integração com OpenTelemetry
- Exportadores de métricas (Prometheus / StatsD)
- Benchmarks de performance
- Console CLI (
r4 monitor) - Adaptação para frameworks (Laravel / Symfony)
👥 Contribuindo
Contribuições são muito bem-vindas!
- Faça um fork do repositório
- Crie uma branch com sua feature (
git checkout -b feat/nova-policy) - Envie um PR descrevendo a motivação e uso
Consulte CONTRIBUTING.md e siga os padrões PSR-12 e SemVer.
📜 Licença
Licenciado sob Apache 2.0.
Parte do ecossistema Resilience4u.
🌎 Projetos irmãos
| Projeto | Linguagem | Repositório |
|---|---|---|
| R4Go | Go | resilience4u/r4go |
| R4Js | JavaScript / Node.js | resilience4u/r4js |
| R4PHP | PHP | resilience4u/r4php |