orangesoft/backoff

Back-off algorithm implementation

3.1.2 2023-03-30 19:28 UTC

This package is auto-updated.

Last update: 2024-04-27 21:35:49 UTC


README

Build Status Latest Stable Version Packagist PHP Version Support Total Downloads License

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.