Konfigurationsänderungen der Nachrichtenwarteschlange in Magento 2 EE 2.1


10

Ich habe mir die Funktionalität der EE-Nachrichtenwarteschlangen angesehen, aber sie scheint unvollständig zu sein.

Vor 2.1 gab es eine einigermaßen funktionale Implementierung, mit der Sie etc/queue.xmlPublisher, Themen, Konsumenten und Warteschlangen definieren konnten, wie in der offiziellen Dokumentation beschrieben: http://devdocs.magento.com/guides/v2.0/config-guide /mq/config-mq.html .

Es gab Einschränkungen, z. B. dass keine Bindungen erstellt werden konnten, es sei denn, sie stimmten mit einem in der Konfiguration definierten Thema überein, was die Flexibilität einschränkte, da Sie alle möglichen Themenmöglichkeiten im Voraus definieren mussten. Das Fehlen eines wiederkehrenden Installationsskripts bedeutete auch, dass Sie ein wenig hacken mussten, um das Installationsskript erneut auszuführen.

Ab 2.1 sind die Publisher-, Topic-, Consumer- und Bind-Elemente in etc/queue.xmlveraltet und die Konfiguration wird zwischen etc/queue.xmlund aufgeteilt etc/communication.xml, wie hier zu sehen ist: https://github.com/magento/magento2-samples/blob/master/sample- Modul-Beispiel-Nachrichtenwarteschlange / etc / . Das veraltete Schema publisher / topic / consumer / bind kann weiterhin isoliert verwendet werden, jedoch nicht in Verbindung mit dem überarbeiteten Broker- / Warteschlangenschema.

Nichts davon ist jedoch in der offiziellen Dokumentation enthalten, und es ist nicht sofort klar, warum die Konfiguration aufgeteilt wurde und in einigen Fällen dupliziert werden muss. Noch wichtiger ist, dass es derzeit keine Möglichkeit gibt, die Bindung zu definieren. Stattdessen wird der Themenname als Routing-Schlüssel verwendet. Dies wiederum macht es auch unmöglich, Sonderzeichen zum Binden von Warteschlangen zu verwenden. Es scheint also überarbeitet worden zu sein, hat aber die Funktionalität verloren.

Positiv zu vermerken ist, dass das magento/module-amqpModul jetzt ein wiederkehrendes Installationsskript verwendet, sodass die Änderungen an der Warteschlangenkonfiguration beim Ausführen installiert werden magento setup:upgrade. Diese Änderung wurde jedoch noch nicht auf das magento/module-mysql-mqModul angewendet .

Also würde ich gerne wissen: a) Habe ich das alles falsch verstanden und es gibt tatsächlich Möglichkeiten, Bindungen zu erstellen und es ist flexibler als es scheint? b) Warum wurde die Konfiguration aufgeteilt?


Als Randnotiz habe ich beim Experimentieren eines der Topologiebeispiele aus den RabbitMQ-Tutorials unter https://www.rabbitmq.com/tutorials/tutorial-four-php.html verwendet :

Geben Sie hier die Bildbeschreibung ein

Diese veraltete Konfiguration erreichte größtenteils die Topologie:

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>

UPDATE: Die Dokumentation wurde jetzt aktualisiert. Platzhalter werden jetzt nicht unterstützt, sodass die Flexibilität eines Themenaustauschs auf Null gesetzt wird. Also habe ich versucht, den folgenden direkten Austausch wiederherzustellen:

Geben Sie hier die Bildbeschreibung ein

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>

Wenn Sie jedoch die Konsumenten ausführen, wird nur das "grüne" Thema an consumerTwo weitergeleitet. Das "schwarze" Thema wird ignoriert. Es scheint also, dass das Beste, was erreicht werden kann, ein direkter Austausch mit nur einer Bindung pro Warteschlange und Verbraucher ist.

Antworten:


1

Danke @KHarper, die aktualisierte Dokumentation ist sehr hilfreich. Leider bestätigt dies, dass die Flexibilität der Warteschlangenkonfiguration verringert wurde.
Philpot

Ich habe dem ursprünglichen Beitrag ein Update hinzugefügt, in dem die eingeschränkte Flexibilität aufgeführt ist. Hoffentlich können Sie mitteilen, ob es eine Möglichkeit gibt, die Topologie für den direkten Austausch zu erstellen.
Philpot

Auch nur um Sie wissen zu lassen, dass es in 2.2 erneut geändert wurde. *
André Ferraz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.