Back-off algorithm implementation.
Back-off algorithm implementation.
You can install the latest version via Composer:
composer require orangesoft/backoff
This package requires PHP 8.1 or later.
Configure BackOff and ExceptionClassifier to retry your business logic when an exception will be thrown:
<?php
use Orangesoft\BackOff\ExponentialBackOff;
use Orangesoft\BackOff\Duration\Seconds;
use Orangesoft\BackOff\Retry\ExceptionClassifier\ExceptionClassifier;
use Orangesoft\BackOff\Retry\Retry;
$backOff = new ExponentialBackOff(
maxAttempts: 3,
baseTime: new Seconds(1),
capTime: new Seconds(60),
);
$exceptionClassifier = new ExceptionClassifier([
\RuntimeException::class,
]);
$retry = new Retry($backOff, $exceptionClassifier);
Put the business logic in a callback function and call it:
$retry->call(function (): int {
$random = mt_rand(5, 10);
if (0 === $random % 2) {
throw new \RuntimeException();
}
return $random;
});
After the exception is thrown call will be retried with a back-off time until max attempts has been reached.
Read more about Back-off and Jitter on AWS Architecture Blog.