0 follower

Final Class Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher

InheritanceYiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( Yiisoft\Queue\Middleware\Consume\MiddlewareFactoryConsumeInterface $middlewareFactory, array|callable|string|Yiisoft\Queue\Middleware\Consume\MiddlewareConsumeInterface $middlewareDefinitions )
$middlewareFactory Yiisoft\Queue\Middleware\Consume\MiddlewareFactoryConsumeInterface
$middlewareDefinitions array|callable|string|Yiisoft\Queue\Middleware\Consume\MiddlewareConsumeInterface

                public function __construct(
    private readonly MiddlewareFactoryConsumeInterface $middlewareFactory,
    array|callable|string|MiddlewareConsumeInterface ...$middlewareDefinitions,
) {
    $this->middlewareDefinitions = array_reverse($middlewareDefinitions);
}

            
dispatch() public method

Dispatch request through middleware to get response.

public Yiisoft\Queue\Middleware\Consume\ConsumeRequest dispatch ( Yiisoft\Queue\Middleware\Consume\ConsumeRequest $request, Yiisoft\Queue\Middleware\Consume\MessageHandlerConsumeInterface $finishHandler )
$request Yiisoft\Queue\Middleware\Consume\ConsumeRequest

Request to pass to middleware.

$finishHandler Yiisoft\Queue\Middleware\Consume\MessageHandlerConsumeInterface

Handler to use in case no middleware produced a response.

                public function dispatch(
    ConsumeRequest $request,
    MessageHandlerConsumeInterface $finishHandler
): ConsumeRequest {
    $handlerName = $request->getMessage()->getHandlerName();
    if (!array_key_exists($handlerName, $this->stack)) {
        $this->stack[$handlerName] = new MiddlewareConsumeStack($this->buildMiddlewares(), $finishHandler);
    }
    return $this->stack[$handlerName]->handleConsume($request);
}

            
hasMiddlewares() public method

public boolean hasMiddlewares ( )
return boolean

Whether there are middleware defined in the dispatcher.

                public function hasMiddlewares(): bool
{
    return $this->middlewareDefinitions !== [];
}

            
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\Consume\MiddlewareConsumeInterface[]|string[] $middlewareDefinitions )
$middlewareDefinitions array[]|callable[]|Yiisoft\Queue\Middleware\Consume\MiddlewareConsumeInterface[]|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 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\Consume\ConsumeMiddlewareDispatcher}

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