123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\MessageQueue;
- use Magento\Framework\MessageQueue\ConfigInterface as MessageQueueConfig;
- use Magento\Framework\MessageQueue\Consumer\ConfigInterface as ConsumerConfig;
- use Magento\Framework\Communication\ConfigInterface as CommunicationConfig;
- /**
- * Value class which stores the configuration
- */
- class ConsumerConfiguration implements ConsumerConfigurationInterface
- {
- /**
- * @deprecated
- * @see ConsumerConfigurationInterface::TOPIC_TYPE
- */
- const CONSUMER_TYPE = "consumer_type";
- /**
- * @deprecated
- * @see ConsumerConfigurationInterface::TOPIC_HANDLERS
- */
- const HANDLERS = 'handlers';
- /**
- * @var array
- */
- private $data;
- /**
- * @var QueueRepository
- */
- private $queueRepository;
- /**
- * @var ConsumerConfig
- */
- private $consumerConfig;
- /**
- * @var CommunicationConfig
- */
- private $communicationConfig;
- /**
- * Initialize dependencies.
- *
- * @param QueueRepository $queueRepository
- * @param MessageQueueConfig $messageQueueConfig
- * @param array $data configuration data
- *
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function __construct(QueueRepository $queueRepository, MessageQueueConfig $messageQueueConfig, $data = [])
- {
- $this->data = $data;
- $this->queueRepository = $queueRepository;
- }
- /**
- * {@inheritdoc}
- */
- public function getConsumerName()
- {
- return $this->getData(self::CONSUMER_NAME);
- }
- /**
- * {@inheritdoc}
- */
- public function getMaxMessages()
- {
- return $this->getData(self::MAX_MESSAGES);
- }
- /**
- * {@inheritdoc}
- */
- public function getQueueName()
- {
- return $this->getData(self::QUEUE_NAME);
- }
- /**
- * {@inheritdoc}
- */
- public function getType()
- {
- $topics = $this->getData(self::TOPICS);
- if (count($topics) > 1) {
- throw new \LogicException(
- 'Current method is deprecated and does not support more than 1 topic declarations for consumer. '
- . 'Use \Magento\Framework\MessageQueue\ConsumerConfiguration::getConsumerType instead. '
- . "Multiple topics declared for consumer '{$this->getConsumerName()}'"
- );
- } elseif (count($topics) < 1) {
- throw new \LogicException(
- "There must be at least one topic declared for consumer '{$this->getConsumerName()}'."
- );
- }
- // Get the only topic and read consumer type from its declaration. Necessary for backward compatibility
- $topicConfig = reset($topics);
- return $topicConfig[self::TOPIC_TYPE];
- }
- /**
- * {@inheritdoc}
- */
- public function getHandlers($topicName)
- {
- return $this->getTopicConfig($topicName)[self::TOPIC_HANDLERS];
- }
- /**
- * {@inheritdoc}
- */
- public function getTopicNames()
- {
- $topics = $this->getData(self::TOPICS);
- return is_array($topics) && count($topics) ? array_keys($topics) : [];
- }
- /**
- * {@inheritdoc}
- */
- public function getQueue()
- {
- $connectionName = $this->getConsumerConfig()->getConsumer($this->getConsumerName())->getConnection();
- return $this->queueRepository->get($connectionName, $this->getQueueName());
- }
- /**
- * {@inheritdoc}
- */
- public function getMessageSchemaType($topicName)
- {
- return $this->getCommunicationConfig()->getTopic($topicName)[CommunicationConfig::TOPIC_REQUEST_TYPE];
- }
- /**
- * Get topic configuration for current consumer.
- * @param string $topicName
- * @return array
- * @throws \LogicException
- */
- private function getTopicConfig($topicName)
- {
- if (!isset($this->getData(self::TOPICS)[$topicName])) {
- throw new \LogicException("Consumer configuration for {$topicName} topic not found.");
- }
- return $this->getData(self::TOPICS)[$topicName];
- }
- /**
- * Get specified data item.
- *
- * @param string $key
- * @return string|null
- */
- private function getData($key)
- {
- if (!isset($this->data[$key])) {
- return null;
- }
- return $this->data[$key];
- }
- /**
- * Get consumer config.
- *
- * @return ConsumerConfig
- *
- * @deprecated 102.0.1
- */
- private function getConsumerConfig()
- {
- if ($this->consumerConfig === null) {
- $this->consumerConfig = \Magento\Framework\App\ObjectManager::getInstance()->get(ConsumerConfig::class);
- }
- return $this->consumerConfig;
- }
- /**
- * Get communication config.
- *
- * @return CommunicationConfig
- *
- * @deprecated 102.0.1
- */
- private function getCommunicationConfig()
- {
- if ($this->communicationConfig === null) {
- $this->communicationConfig = \Magento\Framework\App\ObjectManager::getInstance()
- ->get(CommunicationConfig::class);
- }
- return $this->communicationConfig;
- }
- }
|