create-retry-pattern
Retry Pattern Generator
Creates Retry pattern infrastructure for handling transient failures.
When to Use
| Scenario | Example |
|---|---|
| Transient failures | Network timeouts, temporary unavailability |
| External API calls | HTTP requests to third-party services |
| Database operations | Deadlock recovery, connection issues |
| Message processing | Queue message handling with retries |
Component Characteristics
RetryPolicy
- Configures retry behavior
- Maximum attempts
- Delay strategy (fixed, exponential, linear)
- Jitter support to prevent thundering herd
RetryExecutor
- Executes operations with retry logic
- Tracks attempt count
- Applies delay between retries
- Logs retry attempts
Backoff Strategies
- Fixed: Same delay every time
- Linear: Delay increases linearly
- Exponential: Delay doubles (with optional jitter)
Generation Process
Step 1: Generate Core Components
Path: src/Infrastructure/Resilience/Retry/
BackoffStrategy.php— Enum for delay strategiesRetryPolicy.php— Configuration with shouldRetry/calculateDelayRetryContext.php— Attempt context value objectRetryException.php— Exception with attempt history
Step 2: Generate Executor
Path: src/Infrastructure/Resilience/Retry/
RetryExecutor.php— Main retry logic with callbacksSleepInterface.php— For testability
Step 3: Generate Tests
RetryPolicyTest.php— Policy behavior testsRetryExecutorTest.php— Executor tests
File Placement
| Component | Path |
|---|---|
| All Classes | src/Infrastructure/Resilience/Retry/ |
| Unit Tests | tests/Unit/Infrastructure/Resilience/Retry/ |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Policy | RetryPolicy |
RetryPolicy |
| Strategy Enum | BackoffStrategy |
BackoffStrategy |
| Executor | RetryExecutor |
RetryExecutor |
| Context | RetryContext |
RetryContext |
| Exception | RetryException |
RetryException |
| Test | {ClassName}Test |
RetryExecutorTest |
Quick Template Reference
RetryPolicy
final readonly class RetryPolicy
{
public function __construct(
public int $maxAttempts = 3,
public int $baseDelayMs = 100,
public int $maxDelayMs = 10000,
public float $multiplier = 2.0,
public bool $useJitter = true,
public BackoffStrategy $strategy = BackoffStrategy::Exponential,
public array $retryableExceptions = [],
public array $nonRetryableExceptions = []
) {}
public static function exponential(int $maxAttempts = 5, int $baseDelayMs = 100): self;
public static function linear(int $maxAttempts = 5, int $baseDelayMs = 500): self;
public function shouldRetry(\Throwable $e, int $attempt): bool;
public function calculateDelay(int $attempt): int;
}
RetryExecutor
final readonly class RetryExecutor
{
public function execute(
callable $operation,
RetryPolicy $policy,
?callable $onRetry = null
): mixed;
}
Usage Example
$policy = new RetryPolicy(
maxAttempts: 3,
baseDelayMs: 200,
retryableExceptions: [
ConnectionException::class,
TimeoutException::class,
],
nonRetryableExceptions: [
ClientException::class,
]
);
try {
$result = $retryExecutor->execute(
operation: fn() => $httpClient->get($url),
policy: $policy,
onRetry: fn($e, $ctx) => $logger->warning('Retrying...', ['attempt' => $ctx->attempt])
);
} catch (RetryException $e) {
// All retries exhausted
$deadLetter->send($message, $e);
}
Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|---|---|---|
| No Max Attempts | Infinite retries | Always set maxAttempts |
| No Backoff | Hammering service | Use exponential backoff |
| Retrying All Exceptions | Retrying unrecoverable errors | Specify retryable exceptions |
| No Jitter | Thundering herd | Enable jitter |
| Ignoring Context | Can't track attempts | Use RetryContext |
| Blocking Forever | Thread exhaustion | Set maxDelayMs cap |
References
For complete PHP templates and examples, see:
references/templates.md— RetryPolicy, BackoffStrategy, RetryExecutor, RetryContext templatesreferences/examples.md— HTTP client, database, message consumer examples and tests
More from dykyi-roman/awesome-claude-code
psr-overview-knowledge
PHP Standards Recommendations (PSR) overview knowledge base. Provides comprehensive reference for all accepted PSRs including PSR-1,3,4,6,7,11,12,13,14,15,16,17,18,20. Use for PSR selection decisions and compliance audits.
22detect-code-smells
Detects code smells in PHP codebases. Identifies God Class, Feature Envy, Data Clumps, Long Parameter List, Long Method, Primitive Obsession, Message Chains, Inappropriate Intimacy. Generates actionable reports with refactoring recommendations.
15clean-arch-knowledge
Clean Architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Clean Architecture and Hexagonal Architecture audits.
15ddd-knowledge
DDD architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Domain-Driven Design audits.
14testing-knowledge
Testing knowledge base for PHP 8.4 projects. Provides testing pyramid, AAA pattern, naming conventions, isolation principles, DDD testing guidelines, and PHPUnit patterns.
12bug-root-cause-finder
Root cause analysis methods for PHP bugs. Provides 5 Whys technique, fault tree analysis, git bisect guidance, and stack trace parsing.
12