Programming Language PHP

Namespace Oro\Component\MessageQueue\Consumption

Class Context

Method/Function setStatus

Total Examples 1

1 code examples of PHP Oro\Component\MessageQueue\Consumption\Context::setStatus extracted from open source projects

Was this example useful?
0
                                                    /**
     * @inheritdoc
     */
    public function onPreReceived(Context $context)
    {
        $message = $context->getMessage();
        if (!$message->isRedelivered()) {
            return;
        }

        if ($context->getStatus()) {
            // There is no sense in proceeding as message status is already known.
            $context->getLogger()->debug(
                'Skipping extension as message status is already set.',
                ['messageId' => $message->getMessageId(), 'status' => $context->getStatus()]
            );

            return;
        }

        $properties = $message->getProperties();
        if (!isset($properties[self::PROPERTY_REDELIVER_COUNT])) {
            $properties[self::PROPERTY_REDELIVER_COUNT] = 1;
        } else {
            $properties[self::PROPERTY_REDELIVER_COUNT]++;
        }

        $delayedMessage = new Message();
        $delayedMessage->setBody($message->getBody());
        $delayedMessage->setHeaders($message->getHeaders());
        $delayedMessage->setProperties($properties);
        $delayedMessage->setDelay($this->delay);
        $delayedMessage->setMessageId($message->getMessageId());

        $queue = $context->getSession()->createQueue($context->getQueueName());

        $this->driver->send($queue, $delayedMessage);
        $context->getLogger()->debug('Send delayed message');

        $context->setStatus(MessageProcessorInterface::REJECT);
        $context->getLogger()->debug('Reject redelivered original message by setting reject status to context.');
    }