Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Reader.php
Go to the documentation of this file.
1 <?php
7 
12 use Magento\Framework\ObjectManager\ConfigInterface as ObjectManagerConfig;
13 use Magento\Framework\Reflection\MethodsMap as ServiceMethodsMap;
14 
18 class Reader implements ReaderInterface
19 {
23  private $defaultValueProvider;
24 
28  private $objectManagerConfig;
29 
33  private $reflectionGenerator;
34 
38  private $serviceMethodsMap;
39 
48  public function __construct(
49  DefaultValueProvider $defaultValueProvider,
50  ObjectManagerConfig $objectManagerConfig,
51  ReflectionGenerator $reflectionGenerator,
52  ServiceMethodsMap $serviceMethodsMap
53  ) {
54  $this->defaultValueProvider = $defaultValueProvider;
55  $this->objectManagerConfig = $objectManagerConfig;
56  $this->reflectionGenerator = $reflectionGenerator;
57  $this->serviceMethodsMap = $serviceMethodsMap;
58  }
59 
63  public function read($scope = null)
64  {
65  $exchangeName = $this->defaultValueProvider->getExchange();
66  return [
67  $exchangeName => [
68  'name' => $exchangeName,
69  'type' => 'topic',
70  'connection' => $this->defaultValueProvider->getConnection(),
71  'durable' => true,
72  'autoDelete' => false,
73  'internal' => false,
74  'bindings' => $this->generateBindings(),
75  'arguments' => [],
76  ]
77  ];
78  }
79 
89  private function generateBindings()
90  {
91  $bindings = [];
92  foreach ($this->getRemoteServices() as $serviceInterface => $remoteImplementation) {
93  try {
94  $methodsMap = $this->serviceMethodsMap->getMethodsMap($serviceInterface);
95  } catch (\Exception $e) {
96  throw new \LogicException(sprintf('Service interface was expected, "%s" given', $serviceInterface));
97  }
98  foreach ($methodsMap as $methodName => $returnType) {
99  $topic = $this->reflectionGenerator->generateTopicName($serviceInterface, $methodName);
100  $exchangeName = $this->defaultValueProvider->getExchange();
101  $destination = 'queue.' . $topic;
102  $id = $topic . '--' . $exchangeName . '--' . $destination;
103  $bindings[$id] = [
104  'id' => $id,
105  'destinationType' => 'queue',
106  'destination' => $destination,
107  'disabled' => false,
108  'topic' => $topic,
109  'arguments' => []
110  ];
111  }
112  }
113  return $bindings;
114  }
115 
121  private function getRemoteServices()
122  {
123  $preferences = $this->objectManagerConfig->getPreferences();
124  $remoteServices = [];
125  foreach ($preferences as $type => $preference) {
126  if ($preference == $type . RemoteServiceGenerator::REMOTE_SERVICE_SUFFIX) {
127  $remoteServices[$type] = $preference;
128  }
129  }
130  return $remoteServices;
131  }
132 }
$id
Definition: fieldset.phtml:14
$type
Definition: item.phtml:13
__construct(DefaultValueProvider $defaultValueProvider, ObjectManagerConfig $objectManagerConfig, ReflectionGenerator $reflectionGenerator, ServiceMethodsMap $serviceMethodsMap)
Definition: Reader.php:48