Denisyukphp Backoff Save

Back-off algorithm implementation.

Project README

BackOff

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.

Open Source Agenda is not affiliated with "Denisyukphp Backoff" Project. README Source: denisyukphp/backoff
Stars
25
Open Issues
0
Last Commit
4 months ago
Repository
License
MIT

Open Source Agenda Badge

Open Source Agenda Rating