Изменения конфигурации очереди сообщений в 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- модуль-образец-очередь сообщений / etc / . Схему устаревшего издателя / темы / потребителя / связывания по-прежнему можно использовать изолированно, но не в сочетании с измененной схемой посредника / очереди.

Тем не менее, ничего из этого не появилось в официальной документации, и не сразу понятно, почему конфигурация была разделена и требует дублирования в некоторых случаях. Что еще более важно, сейчас, похоже, не существует средства для определения привязки, вместо этого в качестве ключа маршрутизации используется имя темы. Это, в свою очередь, также делает невозможным использование специальных символов для привязки очередей. Так что, похоже, он был переработан, но потерял функциональность.

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

Итак, я хотел бы знать: а) Я все понял неправильно, и на самом деле есть способ создать привязки, и он более гибкий, чем кажется? б) Почему конфигурация была разделена?


В качестве дополнительного примечания, поскольку я экспериментировал с этим, я использовал один из примеров топологии из учебных пособий 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 / конфиг-гид / кв.м. / очереди migration.html

К Харпер
источник
Спасибо @KHarper, обновленная документация очень полезна. К сожалению, это подтверждает, что гибкость конфигурации очереди была уменьшена.
Philpot
Я добавил обновление к исходному сообщению, описывающее ограниченную гибкость, надеюсь, вы сможете посоветовать, если есть способ создать топологию прямого обмена.
Филпот
Кроме того, просто чтобы вы знали, что это было изменено снова в 2.2. *
Андре Феррас