0 follower

Final Class Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher

InheritanceYiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher

Public Methods

Hide inherited methods

Method Description Defined By
__construct() Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher
dispatch() Dispatch request through middleware to get response. Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher
withMiddlewares() Returns new instance with middleware handlers replaced with the ones provided. Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher

Constants

Hide inherited constants

Constant Value Description Defined By
DEFAULT_PIPELINE 'failure-pipeline-default' Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( Yiisoft\Queue\Middleware\FailureHandling\MiddlewareFactoryFailureInterface $middlewareFactory, array[][]|callable[][]|Yiisoft\Queue\Middleware\FailureHandling\MiddlewareFailureInterface[][]|string[][] $middlewareDefinitions )
$middlewareFactory Yiisoft\Queue\Middleware\FailureHandling\MiddlewareFactoryFailureInterface
$middlewareDefinitions array[][]|callable[][]|Yiisoft\Queue\Middleware\FailureHandling\MiddlewareFailureInterface[][]|string[][]

                public function __construct(
    private readonly MiddlewareFactoryFailureInterface $middlewareFactory,
    private array $middlewareDefinitions,
) {
    $this->init();
}

            
dispatch() public method

Dispatch request through middleware to get response.

public Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest dispatch ( Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest $request, Yiisoft\Queue\Middleware\FailureHandling\MessageFailureHandlerInterface $finishHandler )
$request Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest

Request to pass to middleware.

$finishHandler Yiisoft\Queue\Middleware\FailureHandling\MessageFailureHandlerInterface

Handler to use in case no middleware produced a response.

                public function dispatch(
    FailureHandlingRequest $request,
    MessageFailureHandlerInterface $finishHandler
): FailureHandlingRequest {
    /** @var string $channel It is always string in this context */
    $channel = $request->getQueue()->getChannel();
    if (!isset($this->middlewareDefinitions[$channel]) || $this->middlewareDefinitions[$channel] === []) {
        $channel = self::DEFAULT_PIPELINE;
    }
    $definitions = array_reverse($this->middlewareDefinitions[$channel]);
    if (!isset($this->stack[$channel])) {
        $this->stack[$channel] = new MiddlewareFailureStack($this->buildMiddlewares(...$definitions), $finishHandler);
    }
    return $this->stack[$channel]->handleFailure($request);
}

            
withMiddlewares() public method

Returns new instance with middleware handlers replaced with the ones provided.

The last specified handler will be executed first.

public self withMiddlewares ( array[][]|callable[][]|Yiisoft\Queue\Middleware\FailureHandling\MiddlewareFailureInterface[][]|string[][] $middlewareDefinitions )
$middlewareDefinitions array[][]|callable[][]|Yiisoft\Queue\Middleware\FailureHandling\MiddlewareFailureInterface[][]|string[][]

Each array element is:

  • A name of a middleware class. The middleware instance will be obtained from container executed.
  • A callable with function(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface signature.
  • A "callable-like" array in format [FooMiddleware::class, 'index']. FooMiddleware instance will be created and index() method will be executed.
  • A function returning a middleware. The middleware returned will be executed.

For callables typed parameters are automatically injected using dependency injection container.

return self

New instance of the {@see \Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher}

                public function withMiddlewares(array $middlewareDefinitions): self
{
    $instance = clone $this;
    $instance->middlewareDefinitions = $middlewareDefinitions;
    // Fixes a memory leak.
    unset($instance->stack);
    $instance->stack = [];
    $instance->init();
    return $instance;
}