tobion / retry
A generic library to retry an operation in case of an error. You can configure the behavior like the exceptions to retry on.
Installs: 202 863
Dependents: 1
Suggesters: 0
Security: 0
Stars: 15
Watchers: 6
Forks: 0
Open Issues: 0
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2024-10-29 01:07:06 UTC
README
PHP library for retrying code, e.g. HTTP requests or database transactions, in case of failures.
Installation
$ composer require tobion/retry
Usage
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() ->maxRetries(5) ->delayInMs(100) ->retryOnSpecificExceptions(\RuntimeException::class) // other failures like \TypeError will not be retried ->decorate($callableThatMightFail) ; $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: $retryingCallable->getRetries();
Contributing
To run tests:
$ composer install
$ vendor/bin/simple-phpunit