ConfigReaderPlugin.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\MessageQueue\Config\Topology;
  7. use Magento\Framework\MessageQueue\ConfigInterface as QueueConfig;
  8. /**
  9. * Plugin which provides access to topology declared in queue config using topology config interface.
  10. *
  11. * @deprecated 102.0.1
  12. */
  13. class ConfigReaderPlugin
  14. {
  15. /**
  16. * @var QueueConfig
  17. */
  18. private $queueConfig;
  19. /**
  20. * Initialize dependencies.
  21. *
  22. * @param QueueConfig $queueConfig
  23. */
  24. public function __construct(QueueConfig $queueConfig)
  25. {
  26. $this->queueConfig = $queueConfig;
  27. }
  28. /**
  29. * Read values from queue config and make them available via topology config.
  30. *
  31. * @param \Magento\Framework\MessageQueue\Topology\Config\CompositeReader $subject
  32. * @param array $result
  33. * @param string|null $scope
  34. * @return array
  35. *
  36. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  37. */
  38. public function afterRead(
  39. \Magento\Framework\MessageQueue\Topology\Config\CompositeReader $subject,
  40. array $result,
  41. $scope = null
  42. ) {
  43. $topologyConfigDataFromQueueConfig = $this->getTopologyConfigDataFromQueueConfig();
  44. foreach ($topologyConfigDataFromQueueConfig as $exchangeKey => $exchangeConfig) {
  45. if (isset($result[$exchangeKey])) {
  46. $result[$exchangeKey]['bindings'] = array_merge(
  47. $exchangeConfig['bindings'],
  48. $result[$exchangeKey]['bindings']
  49. );
  50. } else {
  51. $result[$exchangeKey] = $exchangeConfig;
  52. }
  53. }
  54. return $result;
  55. }
  56. /**
  57. * Get data from queue config in format compatible with topology config data internal structure.
  58. *
  59. * @return array
  60. */
  61. private function getTopologyConfigDataFromQueueConfig()
  62. {
  63. $result = [];
  64. foreach ($this->queueConfig->getBinds() as $queueConfigBinding) {
  65. $topic = $queueConfigBinding['topic'];
  66. $destinationType = 'queue';
  67. $destination = $queueConfigBinding['queue'];
  68. $bindingId = $destinationType . '--' . $destination . '--' . $topic;
  69. $bindingData = [
  70. 'id' => $bindingId,
  71. 'destinationType' => $destinationType,
  72. 'destination' => $destination,
  73. 'disabled' => false,
  74. 'topic' => $topic,
  75. 'arguments' => []
  76. ];
  77. $exchangeName = $queueConfigBinding['exchange'];
  78. $connection = $this->queueConfig->getConnectionByTopic($topic);
  79. if (isset($result[$exchangeName . '--' . $connection])) {
  80. $result[$exchangeName . '--' . $connection]['bindings'][$bindingId] = $bindingData;
  81. } else {
  82. $result[$exchangeName . '--' . $connection] = [
  83. 'name' => $exchangeName,
  84. 'type' => 'topic',
  85. 'connection' => $connection,
  86. 'durable' => true,
  87. 'autoDelete' => false,
  88. 'internal' => false,
  89. 'bindings' => [$bindingId => $bindingData],
  90. 'arguments' => [],
  91. ];
  92. }
  93. }
  94. return $result;
  95. }
  96. }