0

Final Class Yiisoft\Queue\Worker\Worker

InheritanceYiisoft\Queue\Worker\Worker
ImplementsYiisoft\Queue\Worker\WorkerInterface

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( \Psr\Log\LoggerInterface $logger, Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher $consumeMiddlewareDispatcher, Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher $failureMiddlewareDispatcher, Yiisoft\Queue\Message\Handler\HandlerResolver $handlerResolver )
$logger \Psr\Log\LoggerInterface
$consumeMiddlewareDispatcher Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher
$failureMiddlewareDispatcher Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher
$handlerResolver Yiisoft\Queue\Message\Handler\HandlerResolver

                public function __construct(
    private readonly LoggerInterface $logger,
    private readonly ConsumeMiddlewareDispatcher $consumeMiddlewareDispatcher,
    private readonly FailureMiddlewareDispatcher $failureMiddlewareDispatcher,
    private readonly HandlerResolver $handlerResolver,
) {}

            
process() public method

public void process ( Yiisoft\Queue\Message\MessageInterface $message, string $queueName )
$message Yiisoft\Queue\Message\MessageInterface
$queueName string
throws Throwable

                public function process(MessageInterface $message, string $queueName): void
{
    $messageId = IdEnvelope::fromMessage($message)->getId();
    if ($messageId === null) {
        $this->logger->info('Processing message without ID.');
    } else {
        $this->logger->info('Processing message #{message}.', ['message' => $messageId]);
    }
    $request = new ConsumeRequest($message, $queueName);
    try {
        $handler = $this->handlerResolver->resolve($message->getType());
        $finalHandler = new ConsumeFinalHandler($handler->handle(...));
        $this->consumeMiddlewareDispatcher->dispatch($request, $finalHandler);
    } catch (Throwable $exception) {
        $request = new FailureHandlingRequest($request->getMessage(), $exception, $request->getQueueName());
        try {
            $this->failureMiddlewareDispatcher->dispatch($request, new FailureFinalHandler());
            $this->logger->info($exception->getMessage());
        } catch (Throwable $exception) {
            $exception = new MessageFailureException($message, $exception);
            $this->logger->error($exception->getMessage());
            throw $exception;
        }
    }
}