resilience4u / r4policy-engine
Declarative resilience policy engine for PHP (R4PHP + YAML/JSON).
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/resilience4u/r4policy-engine
Requires
- php: ^8.2
- justinrainbow/json-schema: ^5.3
- psr/log: ^3.0
- resilience4u/r4contracts: dev-main
- resilience4u/r4php: dev-main
- symfony/console: ^7.1
- symfony/yaml: ^7.1
Requires (Dev)
- phpunit/phpunit: ^10.5
- vimeo/psalm: ^5.26
README
R4Policy Engine — motor declarativo de políticas de resiliência (Retry, Circuit Breaker, Rate Limiter, Bulkhead...)
inspirado em Resilience4j e integrado ao ecossistema R4PHP da Resilience4u.
Visão Geral
O R4Policy Engine permite definir e avaliar políticas de resiliência a partir de arquivos YAML ou JSON —
criando chains compostas de Retry, Circuit Breaker, Timeout e outros comportamentos.
Ele é o componente de Policy Evaluation da iniciativa Resilience4u,
e pode ser usado de forma standalone ou acoplado ao r4php.
Estrutura e Conceitos
+ src/
├── CLI/ # Comandos CLI (validate, dump, diff)
├── Evaluator/ # Avaliação e encadeamento de políticas
├── Loader/ # Carregadores YAML e JSON
├── Model/ # PolicyDefinition e Registry
├── Telemetry/ # Métricas e instrumentação (R4Telemetry-ready)
└── R4PolicyEngine.php # Núcleo de execução
Principais entidades:
| Classe | Responsabilidade |
|---|---|
R4PolicyEngine |
Gerencia registro, carregamento e avaliação de políticas |
PolicyDefinition |
Representação imutável de uma política declarada |
PolicyEvaluator |
Cria chains de execução resiliente com base nas definições |
YamlPolicyLoader / JsonPolicyLoader |
Faz o parsing de arquivos de configuração |
TelemetryBridge |
Ponto de integração com R4Telemetry |
Instalação
composer require resilience4u/r4policy-engine
Uso via CLI
O r4policy inclui um CLI pronto (baseado em Symfony Console) para validar, inspecionar e comparar arquivos de políticas.
Validar um arquivo
./bin/r4policy validate policies.yaml
Saída esperada:
OK - policies.yaml is valid.
Listar políticas carregadas
./bin/r4policy dump policies.yaml
Exemplo de saída:
Loaded policies:
- user_api [retry]
- send_email [circuit_breaker]
Comparar dois arquivos (diff)
./bin/r4policy diff old.yaml new.yaml
Exemplo:
~ changed user_api
+ added payment_gateway
- removed legacy_service
Testes e Cobertura
Executar toda a suíte de testes com cobertura HTML:
composer test
ou diretamente:
./vendor/bin/phpunit --colors=always --coverage-html build/coverage
A cobertura atual atinge ~82% das linhas, com cenários de integração e CLI totalmente testados.
Design
- Inspirado em Resilience4j e Hystrix
- Totalmente modular, extensível e framework-agnostic
- Integrável com
Resiliente\R4PHP(implementações de políticas concretas) - Telemetria desacoplada via
TelemetryBridge
Roadmap (v0.2+)
- Adicionar suporte a TimeLimiter e Bulkhead
- Exportar métricas para
R4Telemetry - Adicionar schema validation no loader
- Suporte a políticas compostas e encadeamentos dinâmicos
Licença
Lançado sob a licença Apache-2.0.
© 2025 — parte do ecossistema Resilience4u.