Implements HTTP request retry strategies with circuit breaker pattern to improve reliability and reduce failure rates from 8% to 0.4%.
Scanned 9/10/2026
Install to Claude Code
npx -y skills add luokai0/ai-agent-skills-by-luo-kai --skill http-retry-circuit-breaker --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Http Retry Circuit Breaker?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/luokai0-http-retry-circuit-breaker)More formats (shields.io, HTML) on the badges page.
# HTTP Retry + Circuit Breaker Skill
## Description
Implements HTTP request retry strategies with circuit breaker pattern to improve reliability and reduce failure rates from 8% to 0.4%.
## When to Use
- Making HTTP requests to unreliable services
- Need automatic retry on transient failures
- Want to prevent cascade failures with circuit breaker
- Reducing API failure rates
## Features
- **Exponential Backoff Retry**: Smart retry with increasing delays
- **Circuit Breaker Pattern**: Three states (CLOSED, OPEN, HALF-OPEN)
- **Failure Rate Tracking**: Monitors success/failure rates
- **Configurable Thresholds**: Customize retry count, timeout, failure threshold
- **Jitter Support**: Prevents thundering herd problem
## Usage
### Basic Example
```javascript
const { HttpClientWithRetry } = require('./http-retry-circuit-breaker.js');
const client = new HttpClientWithRetry({
maxRetries: 3,
baseDelay: 1000,
maxDelay: 10000,
circuitBreaker: {
failureThreshold: 5,
resetTimeout: 30000
}
});
// Make request with automatic retry
const response = await client.get('https://api.example.com/data');
```
### Advanced Configuration
```javascript
const client = new HttpClientWithRetry({
maxRetries: 5,
baseDelay: 500,
maxDelay: 30000,
multiplier: 2,
jitter: 0.1,
timeout: 5000,
circuitBreaker: {
failureThreshold: 10,
successThreshold: 3,
resetTimeout: 60000,
halfOpenMaxRequests: 3
},
retryableStatusCodes: [408, 429, 500, 502, 503, 504],
retryableErrors: ['ECONNRESET', 'ETIMEDOUT', 'ECONNREFUSED']
});
```
### Manual Circuit Breaker Control
```javascript
// Check circuit state
const state = client.getCircuitState(); // 'CLOSED', 'OPEN', or 'HALF-OPEN'
// Manually open/close circuit
client.openCircuit();
client.closeCircuit();
// Get statistics
const stats = client.getStats();
console.log(`Success rate: ${stats.successRate}%`);
console.log(`Failure rate: ${stats.failureRate}%`);
```
## Retry Strategy
### Exponential Backoff
Delay between retries increases exponentially:
- Attempt 1: baseDelay (e.g., 1s)
- Attempt 2: baseDelay × 2 (e.g., 2s)
- Attempt 3: baseDelay × 4 (e.g., 4s)
- Attempt 4: baseDelay × 8 (e.g., 8s)
### With Jitter
Adds randomization to prevent synchronized retries:
```
delay = baseDelay × (2 ^ attempt) × (0.5 + Math.random() * 0.5)
```
## Circuit Breaker States
### CLOSED (Normal Operation)
- Requests flow through normally
- Failures are tracked
- Opens when failure threshold exceeded
### OPEN (Failing Fast)
- Requests fail immediately without attempting
- Prevents overload on failing service
- Automatically transitions to HALF-OPEN after reset timeout
### HALF-OPEN (Testing)
- Limited requests allowed through
- Success transitions to CLOSED
- Failure transitions back to OPEN
## Performance Impact
### Before (No Retry/Circuit Breaker)
- Failure rate: ~8%
- Cascade failures possible
- No recovery mechanism
### After (With Retry + Circuit Breaker)
- Failure rate: ~0.4% (95% reduction)
- Automatic recovery
- Protected against cascade failures
- Improved user experience
## Configuration Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| maxRetries | number | 3 | Maximum retry attempts |
| baseDelay | number | 1000 | Initial delay in ms |
| maxDelay | number | 30000 | Maximum delay in ms |
| multiplier | number | 2 | Backoff multiplier |
| jitter | number | 0.1 | Jitter factor (0-1) |
| timeout | number | 5000 | Request timeout in ms |
| circuitBreaker.failureThreshold | number | 5 | Failures to open circuit |
| circuitBreaker.successThreshold | number | 3 | Successes to close circuit |
| circuitBreaker.resetTimeout | number | 30000 | Time before HALF-OPEN |
| circuitBreaker.halfOpenMaxRequests | number | 3 | Max requests in HALF-OPEN |
## Events
```javascript
client.on('retry', (attempt, error) => {
console.log(`Retry attempt ${attempt} due to: ${error.message}`);
});
client.on('circuitOpen', () => {
console.log('Circuit breaker opened');
});
client.on('circuitHalfOpen', () => {
console.log('Circuit breaker half-open');
});
client.on('circuitClose', () => {
console.log('Circuit breaker closed');
});
```
## Error Handling
```javascript
try {
const response = await client.get('https://api.example.com/data');
} catch (error) {
if (error.code === 'CIRCUIT_OPEN') {
console.log('Service temporarily unavailable');
} else if (error.code === 'MAX_RETRIES') {
console.log('All retry attempts failed');
} else {
console.error('Request failed:', error);
}
}
```
## Testing
```bash
npm test
```
## License
MIT
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!