Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Publisher.php
Go to the documentation of this file.
1 <?php
7 
11 use PhpAmqpLib\Message\AMQPMessage;
16 
20 class Publisher implements PublisherInterface
21 {
25  private $exchangeRepository;
26 
30  private $envelopeFactory;
31 
35  private $messageEncoder;
36 
40  private $messageValidator;
41 
45  private $responseQueueNameBuilder;
46 
50  private $publisherConfig;
51 
55  private $messageIdGenerator;
56 
66  public function __construct(
67  ExchangeRepository $exchangeRepository,
68  EnvelopeFactory $envelopeFactory,
69  MessageEncoder $messageEncoder,
70  MessageValidator $messageValidator,
71  ResponseQueueNameBuilder $responseQueueNameBuilder,
72  PublisherConfig $publisherConfig,
73  \Magento\Framework\MessageQueue\MessageIdGeneratorInterface $messageIdGenerator
74  ) {
75  $this->exchangeRepository = $exchangeRepository;
76  $this->envelopeFactory = $envelopeFactory;
77  $this->messageEncoder = $messageEncoder;
78  $this->messageValidator = $messageValidator;
79  $this->responseQueueNameBuilder = $responseQueueNameBuilder;
80  $this->publisherConfig = $publisherConfig;
81  $this->messageIdGenerator = $messageIdGenerator;
82  }
83 
87  public function publish($topicName, $data)
88  {
89  $envelopes = [];
90  $replyTo = $this->responseQueueNameBuilder->getQueueName($topicName);
91  foreach ($data as $message) {
92  $this->messageValidator->validate($topicName, $message);
93  $message = $this->messageEncoder->encode($topicName, $message);
94  $envelope = $this->envelopeFactory->create(
95  [
96  'body' => $message,
97  'properties' => [
98  'reply_to' => $replyTo,
99  'delivery_mode' => 2,
100  'correlation_id' => rand(),
101  'message_id' => $this->messageIdGenerator->generate($topicName),
102  ]
103  ]
104  );
105  $envelopes[] = $envelope;
106  }
107  $publisher = $this->publisherConfig->getPublisher($topicName);
108  $connectionName = $publisher->getConnection()->getName();
109  $exchange = $this->exchangeRepository->getByConnectionName($connectionName);
110  return $exchange->enqueue($topicName, $envelopes);
111  }
112 }
$message
__construct(ExchangeRepository $exchangeRepository, EnvelopeFactory $envelopeFactory, MessageEncoder $messageEncoder, MessageValidator $messageValidator, ResponseQueueNameBuilder $responseQueueNameBuilder, PublisherConfig $publisherConfig, \Magento\Framework\MessageQueue\MessageIdGeneratorInterface $messageIdGenerator)
Definition: Publisher.php:66