| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- namespace Magento\Framework\MessageQueue\Topology\Config\RemoteService;
 
- use Magento\Framework\Communication\Config\ReflectionGenerator;
 
- use Magento\Framework\MessageQueue\Code\Generator\RemoteServiceGenerator;
 
- use Magento\Framework\MessageQueue\DefaultValueProvider;
 
- use Magento\Framework\MessageQueue\Topology\Config\ReaderInterface;
 
- use Magento\Framework\ObjectManager\ConfigInterface as ObjectManagerConfig;
 
- use Magento\Framework\Reflection\MethodsMap as ServiceMethodsMap;
 
- /**
 
-  * Reader for queue topology configs based on remote service declaration in DI configs.
 
-  */
 
- class Reader implements ReaderInterface
 
- {
 
-     /**
 
-      * @var DefaultValueProvider
 
-      */
 
-     private $defaultValueProvider;
 
-     /**
 
-      * @var ObjectManagerConfig
 
-      */
 
-     private $objectManagerConfig;
 
-     /**
 
-      * @var ReflectionGenerator
 
-      */
 
-     private $reflectionGenerator;
 
-     /**
 
-      * @var ServiceMethodsMap
 
-      */
 
-     private $serviceMethodsMap;
 
-     /**
 
-      * Initialize dependencies.
 
-      *
 
-      * @param DefaultValueProvider $defaultValueProvider
 
-      * @param ObjectManagerConfig $objectManagerConfig
 
-      * @param ReflectionGenerator $reflectionGenerator
 
-      * @param ServiceMethodsMap $serviceMethodsMap
 
-      */
 
-     public function __construct(
 
-         DefaultValueProvider $defaultValueProvider,
 
-         ObjectManagerConfig $objectManagerConfig,
 
-         ReflectionGenerator $reflectionGenerator,
 
-         ServiceMethodsMap $serviceMethodsMap
 
-     ) {
 
-         $this->defaultValueProvider = $defaultValueProvider;
 
-         $this->objectManagerConfig = $objectManagerConfig;
 
-         $this->reflectionGenerator = $reflectionGenerator;
 
-         $this->serviceMethodsMap = $serviceMethodsMap;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function read($scope = null)
 
-     {
 
-         $exchangeName = $this->defaultValueProvider->getExchange();
 
-         return [
 
-             $exchangeName => [
 
-                 'name' => $exchangeName,
 
-                 'type' => 'topic',
 
-                 'connection' => $this->defaultValueProvider->getConnection(),
 
-                 'durable' => true,
 
-                 'autoDelete' => false,
 
-                 'internal' => false,
 
-                 'bindings' => $this->generateBindings(),
 
-                 'arguments' => [],
 
-             ]
 
-         ];
 
-     }
 
-     /**
 
-      * Generate list of bindings based on information about remote services declared in DI config.
 
-      *
 
-      * @return array
 
-      *
 
-      * @throws \LogicException
 
-      *
 
-      * @SuppressWarnings(PHPMD.UnusedLocalVariable)
 
-      */
 
-     private function generateBindings()
 
-     {
 
-         $bindings = [];
 
-         foreach ($this->getRemoteServices() as $serviceInterface => $remoteImplementation) {
 
-             try {
 
-                 $methodsMap = $this->serviceMethodsMap->getMethodsMap($serviceInterface);
 
-             } catch (\Exception $e) {
 
-                 throw new \LogicException(sprintf('Service interface was expected, "%s" given', $serviceInterface));
 
-             }
 
-             foreach ($methodsMap as $methodName => $returnType) {
 
-                 $topic = $this->reflectionGenerator->generateTopicName($serviceInterface, $methodName);
 
-                 $exchangeName = $this->defaultValueProvider->getExchange();
 
-                 $destination = 'queue.' . $topic;
 
-                 $id = $topic . '--' . $exchangeName . '--' . $destination;
 
-                 $bindings[$id] = [
 
-                     'id' => $id,
 
-                     'destinationType' => 'queue',
 
-                     'destination' => $destination,
 
-                     'disabled' => false,
 
-                     'topic' => $topic,
 
-                     'arguments' => []
 
-                 ];
 
-             }
 
-         }
 
-         return $bindings;
 
-     }
 
-     /**
 
-      * Get list of remote services declared in DI config.
 
-      *
 
-      * @return array
 
-      */
 
-     private function getRemoteServices()
 
-     {
 
-         $preferences = $this->objectManagerConfig->getPreferences();
 
-         $remoteServices = [];
 
-         foreach ($preferences as $type => $preference) {
 
-             if ($preference == $type . RemoteServiceGenerator::REMOTE_SERVICE_SUFFIX) {
 
-                 $remoteServices[$type] = $preference;
 
-             }
 
-         }
 
-         return $remoteServices;
 
-     }
 
- }
 
 
  |