Generates Circuit Breaker pattern for PHP 8.4. Creates resilience component protecting against cascading failures with state management, fallback support, and metrics. Includes unit tests.
From accnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accThis skill uses the workspace's default tool permissions.
references/examples.mdreferences/templates.mdCreates Circuit Breaker pattern infrastructure for resilience and fault tolerance.
| Scenario | Example |
|---|---|
| External service calls | API integrations, payment gateways |
| Database connections | Prevent connection exhaustion |
| Cascading failures | Stop failure propagation |
| Service degradation | Graceful fallback when service unavailable |
Path: src/Infrastructure/Resilience/CircuitBreaker/
CircuitState.php — Enum with state transitionsCircuitBreakerConfig.php — Configuration value objectCircuitBreakerException.php — Exception for open circuitPath: src/Infrastructure/Resilience/CircuitBreaker/
CircuitBreaker.php — Main implementation with state managementPath: src/Infrastructure/Resilience/CircuitBreaker/
CircuitBreakerFactory.php — Creates configured breakersCircuitBreakerRegistry.php — Per-service breaker managementCircuitStateTest.php — State transition testsCircuitBreakerTest.php — Breaker behavior tests| Component | Path |
|---|---|
| All Classes | src/Infrastructure/Resilience/CircuitBreaker/ |
| Unit Tests | tests/Unit/Infrastructure/Resilience/CircuitBreaker/ |
| Component | Pattern | Example |
|---|---|---|
| State Enum | CircuitState | CircuitState |
| Config | CircuitBreakerConfig | CircuitBreakerConfig |
| Main Class | CircuitBreaker | CircuitBreaker |
| Factory | CircuitBreakerFactory | CircuitBreakerFactory |
| Registry | CircuitBreakerRegistry | CircuitBreakerRegistry |
| Exception | CircuitBreakerException | CircuitBreakerException |
| Test | {ClassName}Test | CircuitBreakerTest |
enum CircuitState: string
{
case Closed = 'closed';
case Open = 'open';
case HalfOpen = 'half_open';
public function allowsRequest(): bool;
public function canTransitionTo(self $next): bool;
}
final readonly class CircuitBreakerConfig
{
public function __construct(
public int $failureThreshold = 5,
public int $successThreshold = 3,
public int $openTimeoutSeconds = 30,
public int $halfOpenMaxAttempts = 3
) {}
public static function default(): self;
public static function aggressive(): self;
public static function lenient(): self;
}
final class CircuitBreaker
{
public function execute(callable $operation, ?callable $fallback = null): mixed;
public function canExecute(): bool;
public function getState(): CircuitState;
public function forceOpen(): void;
public function forceClose(): void;
}
$breaker = $circuitBreakers->get('payment-gateway');
try {
$result = $breaker->execute(
operation: fn() => $paymentClient->charge($request),
fallback: fn() => PaymentResult::deferred($request->id)
);
} catch (CircuitBreakerException $e) {
// Circuit is open
return PaymentResult::serviceUnavailable($request->id);
}
CLOSED ─────failure threshold reached────→ OPEN
↑ │
│ │ timeout elapsed
│ ↓
success threshold reached HALF-OPEN
└────────────────────────────────────────┘
│
failure in half-open
│
↓
OPEN
| Anti-pattern | Problem | Solution |
|---|---|---|
| Global Circuit Breaker | One breaker for all services | Per-service breakers |
| No Fallback | Hard failure on open | Provide fallback strategy |
| Immediate Retry | Hammering failed service | Use timeout before HalfOpen |
| No Metrics | Can't monitor health | Log state transitions |
| Static Thresholds | Can't tune per service | Configurable per service |
| No Manual Override | Can't force open/close | Add force methods |
For complete PHP templates and examples, see:
references/templates.md — CircuitState, CircuitBreakerConfig, CircuitBreaker, Factory, Registry templatesreferences/examples.md — HTTP client, payment gateway examples and testsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.