Зміни конфігурації черги повідомлень у Magento 2 EE 2.1


10

Я розглядав функціональні черги повідомлень EE, але, здається, він є неповним.

До 2.1 існувала досить функціональна реалізація, яка дозволила вам створити etc/queue.xmlдля визначення видавців, тем, споживачів та черги, як описано в офіційній документації: http://devdocs.magento.com/guides/v2.0/config-guide /mq/config-mq.html .

Існували обмеження, такі як не вдалося створити прив’язки, якщо вони не відповідали темі, визначеній у конфігурації, що обмежувало гнучкість, оскільки вам потрібно було визначити всі можливі можливості теми наперед. Відсутність повторюваного сценарію встановлення також означало, що вам доведеться трохи зламати, щоб знов запустити сценарій інсталятора.

Станом на 2.1 видавець, тема, споживач і пов'язувати елементи etc/queue.xmlзастаріли і конфігурація розщеплюється між etc/queue.xmlі etc/communication.xml, як можна бачити тут: https://github.com/magento/magento2-samples/blob/master/sample- модуль-зразок-повідомлення-черга / тощо / . Застаріла схема видавця / теми / споживача / зв’язування все ще може використовуватися ізольовано, але не в поєднанні з переглянутою схемою посередника / черги.

Однак нічого з цього не з’явилося в офіційній документації, і в ньому не відразу зрозуміло, чому конфігурація розбита і вимагає дублювання в деяких випадках. Що ще важливіше, здається, що зараз немає можливості визначати прив'язку, натомість назва теми використовується як ключ маршрутизації. Це, у свою чергу, також унеможливлює використання спеціальних символів для прив'язки черг. Таким чином, здається, він був відновлений, але втратив функціональність.

З позитивного зауваження, magento/module-amqpтепер модуль використовує повторюваний сценарій встановлення, тому зміни конфігурації черги встановлюються під час запуску magento setup:upgrade. Ця зміна ще не застосовується до magento/module-mysql-mqмодуля.

Тож я хотів би знати: а) Чи я все це неправильно зрозумів і чи є насправді спосіб створення прив’язок, і він є більш гнучким, ніж здається? b) Чому конфігурація була розділена?


В якості побічної записки, коли я експериментував з цим, я використовував один із прикладів топології з навчальних посібників RabbitMQ за адресою https://www.rabbitmq.com/tutorials/tutorial-four-php.html :

введіть тут опис зображення

Ця застаріла конфігурація здебільшого досягала топології:

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>

ОНОВЛЕННЯ: Документація тепер оновлена. Підстановочні картки зараз не підтримуються, тому гнучкість обміну темами стає недійсною. Тому я спробував відтворити наступний прямий обмін:

введіть тут опис зображення

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>

Однак, коли ви запускаєте споживачів, до споживача перенаправляється лише "зелена" тема, вона ігнорує "чорну" тему. Тож здається, що найкраще, що може бути досягнуто, - це прямий обмін лише однією прив'язкою на чергу та споживача.

Відповіді:


1

Ми опублікували документацію про 2.1 черги повідомлень на http://devdocs.magento.com/guides/v2.1/config-guide/mq/config-mq.html та http://devdocs.magento.com/guides/ v2.1 / config-guide / mq / queue-migra.html


Дякуємо @KHarper, оновлена ​​документація дуже корисна. На жаль, це підтверджує, що гнучкість конфігурації черги була знижена.
philpot

До початкової публікації я додав оновлення, де деталізується обмежена гнучкість, сподіваємось, ви зможете порадити, чи є спосіб створити топологію прямого обміну.
philpot

Крім того, щоб повідомити, що його знову було змінено в 2.2. *
Андре Ферраз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.