1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\MessageQueue;
- use Magento\Framework\Exception\NotFoundException;
- use Magento\Framework\Phrase;
- class MessageController
- {
- /**
- * @var \Magento\Framework\MessageQueue\LockInterfaceFactory
- */
- private $lockFactory;
- /**
- * @var \Magento\Framework\MessageQueue\Lock\ReaderInterface
- */
- private $reader;
- /**
- * @var \Magento\Framework\MessageQueue\Lock\WriterInterface
- */
- private $writer;
- /**
- * Initialize dependencies.
- *
- * @param \Magento\Framework\MessageQueue\LockInterfaceFactory $lockFactory
- * @param Lock\ReaderInterface $reader
- * @param Lock\WriterInterface $writer
- */
- public function __construct(
- \Magento\Framework\MessageQueue\LockInterfaceFactory $lockFactory,
- \Magento\Framework\MessageQueue\Lock\ReaderInterface $reader,
- \Magento\Framework\MessageQueue\Lock\WriterInterface $writer
- ) {
- $this->lockFactory = $lockFactory;
- $this->reader = $reader;
- $this->writer = $writer;
- }
- /**
- * Create lock corresponding to the provided message. Throw MessageLockException if lock is already created.
- *
- * @param EnvelopeInterface $envelope
- * @param string $consumerName
- * @return LockInterface
- * @throws MessageLockException
- * @throws NotFoundException
- */
- public function lock(EnvelopeInterface $envelope, $consumerName)
- {
- $lock = $this->lockFactory->create();
- $properties = $envelope->getProperties();
- if (empty($properties['message_id'])) {
- throw new NotFoundException(new Phrase("Property 'message_id' not found in properties."));
- }
- $code = $consumerName . '-' . $properties['message_id'];
- $code = md5($code);
- $this->reader->read($lock, $code);
- if ($lock->getId()) {
- throw new MessageLockException(new Phrase('The "%1" message code was already processed.', [$code]));
- }
- $this->writer->saveLock($lock);
- return $lock;
- }
- }
|