Zmiany konfiguracji kolejki komunikatów w Magento 2 EE 2.1

10

Patrzyłem na funkcjonalność kolejek wiadomości EE, ale wygląda na to, że jest niekompletna.

Przed wersją 2.1 istniała racjonalnie funkcjonalna implementacja, która pozwoliła na utworzenie etc/queue.xmlwydawcy, tematów, konsumentów i kolejek zgodnie z opisem w oficjalnej dokumentacji: http://devdocs.magento.com/guides/v2.0/config-guide /mq/config-mq.html .

Istniały ograniczenia, takie jak niemożność tworzenia powiązań, chyba że pasowały one do tematu zdefiniowanego w konfiguracji, co ograniczało elastyczność, ponieważ trzeba było z góry zdefiniować wszystkie możliwe możliwości tematu. Brak powtarzającego się skryptu instalacyjnego oznaczał również konieczność włamania się, aby skrypt instalatora mógł zostać ponownie uruchomiony.

Od wersji 2.1 elementy wydawcy, tematu, konsumenta i powiązania etc/queue.xmlsą przestarzałe, a konfiguracja jest podzielona między etc/queue.xmli etc/communication.xml, jak widać tutaj: https://github.com/magento/magento2-samples/blob/master/sample- moduł-próbka-kolejka komunikatów / etc / . Przestarzały schemat wydawcy / tematu / konsumenta / powiązania może nadal być używany w oderwaniu, ale nie w połączeniu ze zmienionym schematem brokera / kolejki.

Jednak nic z tego nie pojawiło się w oficjalnej dokumentacji i nie jest od razu jasne, dlaczego konfiguracja została podzielona, ​​aw niektórych przypadkach wymaga duplikacji. Co ważniejsze, wydaje się, że obecnie nie ma możliwości zdefiniowania wiązania, ponieważ zamiast tego nazwa tematu jest używana jako klucz routingu. To z kolei uniemożliwia także używanie znaków specjalnych do wiązania kolejki. Wygląda na to, że został zrefaktoryzowany, ale utracił funkcjonalność.

Pozytywnie, magento/module-amqpmoduł używa teraz cyklicznego skryptu instalatora, więc zmiany konfiguracji kolejki są instalowane podczas uruchamiania magento setup:upgrade. Ta zmiana nie została magento/module-mysql-mqjednak jeszcze zastosowana w module.

Chciałbym więc wiedzieć: a) Czy wszystko popełniłem źle i czy istnieje sposób tworzenia powiązań i jest on bardziej elastyczny niż się wydaje? b) Dlaczego konfiguracja została podzielona?


Na marginesie, eksperymentując z tym, korzystałem z jednego z przykładów topologii z samouczków RabbitMQ na https://www.rabbitmq.com/tutorials/tutorial-four-php.html :

wprowadź opis zdjęcia tutaj

Ta przestarzała konfiguracja w większości osiągnęła topologię:

queue.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
    <topic name="quick.orange.rabbit" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
    <topic name="quick.orange.fox" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
    <topic name="lazy.pink.rabbit" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
    <topic name="lazy.orange.elephant" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
    <topic name="lazy.brown.fox" schema="Example\MessageQueue\Api\MessageInterface" publisher="default" />
    <consumer name="consumerOne" queue="queueOne" connection="amqp" class="Example\MessageQueue\Model\Subscriber" method="processMessage" executor="Magento\Framework\MessageQueue\BatchConsumer" />
    <consumer name="consumerTwo" queue="queueTwo" connection="amqp" class="Example\MessageQueue\Model\Subscriber" method="processMessage" executor="Magento\Framework\MessageQueue\BatchConsumer" />
    <bind queue="queueOne" exchange="magento" topic="*.orange.*" />
    <bind queue="queueTwo" exchange="magento" topic="*.*.rabbit"  />
    <bind queue="queueTwo" exchange="magento" topic="lazy.#" />
</config>

AKTUALIZACJA: Dokumentacja została teraz zaktualizowana. Symbole wieloznaczne nie są teraz obsługiwane, więc elastyczność wymiany tematów jest zerowa. Próbowałem więc odtworzyć następującą bezpośrednią wymianę:

wprowadź opis zdjęcia tutaj

Communication.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Communication/etc/communication.xsd">
    <topic name="orange" request="Example\MessageQueueExample\Api\MessageInterface" />
    <topic name="black" request="Example\MessageQueueExample\Api\MessageInterface" />
    <topic name="green" request="Example\MessageQueueExample\Api\MessageInterface" />
</config>

queue.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
    <broker topic="orange" type="amqp" exchange="magento">
        <queue consumer="consumerOne" name="queueOne" handler="Example\MessageQueueExample\Model\Subscriber::processMessage" consumerInstance="Magento\Framework\MessageQueue\Consumer"/>
    </broker>
    <broker topic="black" type="amqp" exchange="magento">
        <queue consumer="consumerTwo" name="queueTwo" handler="Example\MessageQueueExample\Model\Subscriber::processMessage" consumerInstance="Magento\Framework\MessageQueue\Consumer"/>
    </broker>
    <broker topic="green" type="amqp" exchange="magento">
        <queue consumer="consumerTwo" name="queueThree" handler="Example\MessageQueueExample\Model\Subscriber::processMessage" consumerInstance="Magento\Framework\MessageQueue\Consumer"/>
    </broker>
</config>

Jednak po uruchomieniu konsumentów do konsumenta kierowany jest tylko temat „zielony”, ignoruje on temat „czarny”. Wydaje się więc, że najlepszym, co można osiągnąć, jest bezpośrednia wymiana z tylko jednym powiązaniem na kolejkę i konsumenta.

philpot
źródło

Odpowiedzi:

1

Dokumentację dotyczącą kolejek wiadomości 2.1 opublikowaliśmy na stronie http://devdocs.magento.com/guides/v2.1/config-guide/mq/config-mq.html i http://devdocs.magento.com/guides/ v2.1 / config-guide / mq / queue -igration.html

K Harper
źródło
Dzięki @KHarper zaktualizowana dokumentacja jest bardzo pomocna. Niestety potwierdza to, że elastyczność konfiguracji kolejek została zmniejszona.
philpot
Dodałem aktualizację do oryginalnego postu, wyszczególniając ograniczoną elastyczność, mam nadzieję, że będziesz w stanie doradzić, czy istnieje sposób na stworzenie bezpośredniej topologii wymiany.
philpot
Również po to, aby poinformować, że zmieniono to ponownie w wersji 2.2. *
André Ferraz