1. Go to this page and download the library: Download kissmint3395/aegis library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Aegis\ResiliencePipeline;
use Aegis\Backoff\ExponentialBackoff;
use Aegis\Duration;
$pipeline = ResiliencePipeline::builder()
->retry(
maxAttempts: 3,
backoff: ExponentialBackoff::withJitter(Duration::milliseconds(100)),
retryOn: [\RuntimeException::class],
)
->build();
$result = $pipeline->execute(fn() => $api->fetch());
use Aegis\Backoff\FixedBackoff;
use Aegis\Backoff\ExponentialBackoff;
// Fixed delay
new FixedBackoff(Duration::milliseconds(200))
// Exponential: 100ms → 200ms → 400ms → ...
ExponentialBackoff::create(Duration::milliseconds(100))
// Exponential with jitter: randomised between 50%–100% of each step
ExponentialBackoff::withJitter(Duration::milliseconds(100), maxDelay: Duration::seconds(5))
use Aegis\ResiliencePipeline;
use Aegis\Duration;
$pipeline = ResiliencePipeline::builder()
->circuitBreaker(
name: 'inventory-api',
failureThreshold: 5, // Open after 5 consecutive failures
successThreshold: 2, // Close after 2 consecutive successes in HalfOpen
resetAfter: Duration::seconds(30),
)
->build();
use Aegis\Strategy\CircuitBreaker\Storage\Psr16Storage;
$pipeline = ResiliencePipeline::builder()
->circuitBreaker('payment-api', storage: new Psr16Storage($redisCache))
->build();
$pipeline = ResiliencePipeline::builder()
->adaptiveCircuitBreaker(
name: 'payment-api',
windowSize: 20, // Evaluate the last 20 calls
failureRateThreshold: 50.0, // Open if ≥ 50% fail
minimumCalls: 5, // Don't open until at least 5 calls recorded
successThreshold: 2, // Close after 2 successes in HalfOpen
resetAfter: Duration::seconds(30),
)
->build();
use Aegis\Strategy\CircuitBreaker\Storage\AdaptivePsr16Storage;
->adaptiveCircuitBreaker('api', storage: new AdaptivePsr16Storage($redisCache))
->timeout(Duration::seconds(5))
use Aegis\ResiliencePipeline;
use Aegis\Duration;
$pipeline = ResiliencePipeline::builder()
->rateLimit(
name: 'payment-api',
limit: 100, // Max 100 calls per window
window: Duration::seconds(60),
)
->build();
use Aegis\Strategy\RateLimiter\Storage\Psr16Storage;
$pipeline = ResiliencePipeline::builder()
->rateLimit('payment-api', limit: 100, storage: new Psr16Storage($redisCache))
->build();
use Aegis\Strategy\RateLimiter\Storage\SlidingWindowPsr16Storage;
->slidingRateLimit('payment-api', limit: 100, storage: new SlidingWindowPsr16Storage($redisCache))
$pipeline = ResiliencePipeline::builder()
->tokenBucketRateLimit(
name: 'payment-api',
capacity: 20, // Max burst size
refillRate: 10, // Tokens added per period
refillPeriod: Duration::seconds(1), // Refill interval
)
->build();
use Aegis\Strategy\RateLimiter\Storage\TokenBucketPsr16Storage;
->tokenBucketRateLimit('api', capacity: 20, storage: new TokenBucketPsr16Storage($redisCache))
use Aegis\ResiliencePipeline;
$pipeline = ResiliencePipeline::builder()
->bulkhead(
name: 'database',
maxConcurrent: 10, // Allow at most 10 concurrent calls
)
->build();
use Aegis\Strategy\Bulkhead\Storage\Psr16Storage;
$pipeline = ResiliencePipeline::builder()
->bulkhead('database', maxConcurrent: 10, storage: new Psr16Storage($redisCache))
->build();
use Aegis\ResiliencePipeline;
use Aegis\Duration;
$pipeline = ResiliencePipeline::builder()
->circuitBreaker(
name: 'inventory-api',
failureThreshold: 5,
successThreshold: 2,
resetAfter: Duration::seconds(30),
)
->build();
use Aegis\Strategy\CircuitBreaker\Storage\Psr16Storage;
$pipeline = ResiliencePipeline::builder()
->circuitBreaker('payment-api', storage: new Psr16Storage($redisCache))
->build();