orangesoft / backoff
Back-off algorithm implementation
3.1.2
2023-03-30 19:28 UTC
Requires
- php: ^8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.10
- php-parallel-lint/php-console-highlighter: ^1.0
- php-parallel-lint/php-parallel-lint: ^1.3
- phpbench/phpbench: ^1.2
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.17.0
- vimeo/psalm: ^4.26
README
Back-off algorithm implementation.
Installation
You can install the latest version via Composer:
composer require orangesoft/backoff
This package requires PHP 8.1 or later.
Quick usage
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.
Documentation
Read more about Back-off and Jitter on AWS Architecture Blog.