Skip to content
A generic library to retry an operation in case of an error. You can configure the behavior like the exceptions to retry on.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


PHP library for retrying code, e.g. HTTP requests or database transactions, in case of failures.

Build Status


$ composer require tobion/retry


use Tobion\Retry\Retry;

$callableThatMightFail = function (int $arg1, int $arg2): int {
    if (random_int(1, 2) % 2) {
        throw new \RuntimeException('Sudden error');

    return $arg1 + $arg2;

// Allows you to call the callable with parameters and retry its execution in case an exception is thrown.
// You can access the return value of the callable (3 in this case).
$returnValue = Retry::configure()->call($callableThatMightFail, 1, 2);

// By default:
// - The callable is retried twice (i.e. max three executions). If it still fails, the last error is rethrown.
// - Retries have a no delay between them.
// - Every \Throwable will trigger the retry logic, i.e. both \Exception and \Error.
// You can adjust the retry logic like this:
$retryingCallable = Retry::configure()
    ->retryOnSpecificExceptions(\RuntimeException::class) // other failures like \TypeError will not be retried
$returnValue = $retryingCallable(1, 2);
// $retryingCallable just decorates the original callable and can be used like it.
// To find out how often it had to retry, you can use:


To run tests:

$ composer install
$ vendor/bin/phpunit
You can’t perform that action at this time.