Cambios en la configuración de la cola de mensajes en Magento 2 EE 2.1


10

He estado mirando la funcionalidad de las colas de mensajes EE, pero parece que está incompleta.

Antes de 2.1 había una implementación razonablemente funcional que le permitía crear una etc/queue.xmlpara definir editores, temas, consumidores y colas como se describe en la documentación oficial: http://devdocs.magento.com/guides/v2.0/config-guide /mq/config-mq.html .

Había limitaciones, como no haber podido crear enlaces a menos que coincidieran con un tema definido en la configuración, lo que limitaba la flexibilidad, ya que tenía que definir todas las posibilidades posibles del tema por adelantado. La falta de un script de instalación recurrente también significaba que tenía que hacer un poco de pirateo para que el script de instalación se ejecutara nuevamente.

A partir de 2.1, el editor, el tema, el consumidor y los elementos de enlace etc/queue.xmlhan quedado en desuso y la configuración se divide entre etc/queue.xmly etc/communication.xml, como se puede ver aquí: https://github.com/magento/magento2-samples/blob/master/sample- módulo-muestra-mensaje-cola / etc / . El esquema de editor / tema / consumidor / enlace desaprobado todavía se puede utilizar de forma aislada, pero no junto con el esquema revisado de intermediario / cola.

Sin embargo, nada de esto ha aparecido en la documentación oficial y no está claro de inmediato por qué la configuración se ha dividido y requiere duplicación en algunos casos. Más importante aún, no parece haber una facilidad para definir el enlace ahora, con el nombre del tema utilizado como clave de enrutamiento. Esto a su vez también hace que sea imposible usar caracteres especiales para enlazar colas. Por lo tanto, parece haber sido refactorizado pero perdió funcionalidad.

En una nota positiva, el magento/module-amqpmódulo ahora usa un script de instalación recurrente para que los cambios de configuración de la cola se instalen cuando se ejecuta magento setup:upgrade. Sin magento/module-mysql-mqembargo, este cambio aún no se ha aplicado al módulo.

Entonces, me gustaría saber: a) ¿He entendido todo esto mal y en realidad hay una forma de crear enlaces y es más flexible de lo que parece? b) ¿Por qué se ha dividido la configuración?


Como nota al margen, como he estado experimentando con esto, he estado usando uno de los ejemplos de topología de los tutoriales de RabbitMQ en https://www.rabbitmq.com/tutorials/tutorial-four-php.html :

ingrese la descripción de la imagen aquí

Esta configuración obsoleta logró la topología en su mayor parte:

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>

ACTUALIZACIÓN: La documentación ahora se ha actualizado. Los comodines ahora no son compatibles, por lo que la flexibilidad de un intercambio de temas se vuelve nula. Así que intenté recrear el siguiente intercambio directo:

ingrese la descripción de la imagen aquí

comunicación.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>

Sin embargo, cuando ejecuta los consumidores, solo el tema "verde" se enruta a consumerTwo, ignora el tema "negro". Por lo tanto, parece que lo mejor que se puede lograr es un intercambio directo con un solo enlace por cola y consumidor.

Respuestas:


1

Gracias @KHarper, la documentación actualizada es muy útil. Lamentablemente, confirma que la flexibilidad de la configuración de la cola se ha reducido.
philpot

He agregado una actualización a la publicación original que detalla la flexibilidad limitada, espero que pueda avisar si hay una manera de crear la topología de intercambio directo.
philpot

También solo para hacerle saber que se ha cambiado nuevamente en 2.2. *
André Ferraz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.