0

Final Class Yiisoft\Queue\Middleware\FailureHandling\Implementation\ExponentialDelayMiddleware

InheritanceYiisoft\Queue\Middleware\FailureHandling\Implementation\ExponentialDelayMiddleware
ImplementsYiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareInterface

Resends failures with exponentially increasing adapter-supported delay.

Constants

Hide inherited constants

Constant Value Description Defined By
META_KEY_ATTEMPTS 'failure-strategy-exponential-delay-attempts' Yiisoft\Queue\Middleware\FailureHandling\Implementation\ExponentialDelayMiddleware
META_KEY_DELAY 'failure-strategy-exponential-delay-delay' Yiisoft\Queue\Middleware\FailureHandling\Implementation\ExponentialDelayMiddleware

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( string $id, integer $maxAttempts, float $delayInitial, float $delayMaximum, float $exponent, ?\Yiisoft\Queue\QueueProducerInterface $queue null, ?\Yiisoft\Queue\Provider\QueueProducerProviderInterface $producerProvider null )
$id string
$maxAttempts integer
$delayInitial float
$delayMaximum float
$exponent float
$queue ?\Yiisoft\Queue\QueueProducerInterface
$producerProvider ?\Yiisoft\Queue\Provider\QueueProducerProviderInterface

                public function __construct(
    private readonly string $id,
    private readonly int $maxAttempts,
    private readonly float $delayInitial,
    private readonly float $delayMaximum,
    private readonly float $exponent,
    private readonly ?QueueProducerInterface $queue = null,
    private readonly ?QueueProducerProviderInterface $producerProvider = null,
) {
    if ($maxAttempts <= 0) {
        throw new InvalidArgumentException("maxAttempts parameter must be a positive integer, $this->maxAttempts given.");
    }
    if ($delayInitial <= 0) {
        throw new InvalidArgumentException("delayInitial parameter must be a positive float, $this->delayInitial given.");
    }
    if ($delayMaximum < $delayInitial) {
        throw new InvalidArgumentException("delayMaximum parameter must not be less then delayInitial, $this->delayMaximum given.");
    }
    if ($exponent <= 0) {
        throw new InvalidArgumentException("exponent parameter must not be zero or less, $this->exponent given.");
    }
}

            
processFailure() public method

public Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest processFailure ( Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest $request, Yiisoft\Queue\Middleware\FailureHandling\FailureHandlerInterface $handler )
$request Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest
$handler Yiisoft\Queue\Middleware\FailureHandling\FailureHandlerInterface

                public function processFailure(FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest
{
    $message = $request->getMessage();
    if (!$this->suites($message)) {
        return $handler->handleFailure($request);
    }
    $failure = new FailureEnvelope($message, $this->createNewMeta($message));
    $result = $this->producer($request)->push(new DelayEnvelope($failure, $this->getDelay($failure)));
    return $request->withMessage($result);
}