Modifications de la configuration de la file d'attente de messages dans Magento 2 EE 2.1


10

J'ai regardé la fonctionnalité des files d'attente de messages EE, mais il semble qu'elle soit incomplète.

Avant 2.1, il y avait une implémentation raisonnablement fonctionnelle qui vous permettait de créer un etc/queue.xmlpour définir les éditeurs, les sujets, les consommateurs et les files d'attente comme décrit dans la documentation officielle: http://devdocs.magento.com/guides/v2.0/config-guide /mq/config-mq.html .

Il y avait des limitations telles que l'impossibilité de créer des liaisons à moins qu'elles ne correspondent à un sujet défini dans la configuration, ce qui limitait la flexibilité car vous deviez définir toutes les possibilités de sujet possibles à l'avance. L'absence d'un script d'installation récurrent signifiait également que vous deviez faire un peu de piratage pour que le script d'installation s'exécute à nouveau.

Depuis la version 2.1, les éléments éditeur, topic, consumer et bind etc/queue.xmlsont obsolètes et la configuration est divisée entre etc/queue.xmlet etc/communication.xml, comme on peut le voir ici: https://github.com/magento/magento2-samples/blob/master/sample- module-sample-message-queue / etc / . Le schéma éditeur / rubrique / consommateur / liaison obsolète peut toujours être utilisé de manière isolée, mais pas conjointement avec le schéma de courtier / file d'attente révisé.

Cependant, rien de tout cela n'est apparu dans la documentation officielle et ce n'est pas immédiatement clair pourquoi la configuration a été divisée et nécessite une duplication dans certains cas. Plus important encore, il ne semble pas être possible de définir la liaison maintenant, avec le nom de rubrique utilisé comme clé de routage à la place. Cela rend également impossible l'utilisation de caractères spéciaux pour les files d'attente de liaison. Il semble donc avoir été refactorisé mais perdu de ses fonctionnalités.

Sur une note positive, le magento/module-amqpmodule utilise maintenant un script d'installation récurrent afin que les modifications de configuration de la file d'attente soient installées lorsque vous exécutez magento setup:upgrade. Cette modification n'a pas encore été appliquée au magento/module-mysql-mqmodule.

Je voudrais donc savoir: a) Est-ce que j'ai tout faux et qu'il y a effectivement moyen de créer des liaisons et c'est plus flexible qu'il n'y paraît? b) Pourquoi la configuration a-t-elle été divisée?


En guise de remarque, pendant que j'expérimente cela, j'ai utilisé l'un des exemples de topologie des didacticiels RabbitMQ sur https://www.rabbitmq.com/tutorials/tutorial-four-php.html :

entrez la description de l'image ici

Cette configuration obsolète a atteint la topologie pour la plupart:

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>

MISE À JOUR: La documentation a été mise à jour. Les caractères génériques ne sont désormais plus pris en charge, de sorte que la flexibilité d'un échange de sujet est rendue nulle. J'ai donc essayé de recréer l'échange direct suivant:

entrez la description de l'image ici

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>

Toutefois, lorsque vous exécutez les consommateurs, seule la rubrique "verte" est acheminée vers consumerTwo, elle ignore la rubrique "noire". Il semble donc que le mieux qui puisse être accompli est un échange direct avec une seule liaison par file d'attente et par consommateur.

Réponses:


1

Merci @KHarper, la documentation mise à jour est très utile. Malheureusement, cela confirme que la flexibilité de la configuration de la file d'attente a été réduite.
philpot

J'ai ajouté une mise à jour au message d'origine détaillant la flexibilité limitée, j'espère que vous serez en mesure de vous informer s'il existe un moyen de créer la topologie d'échange direct.
philpot

Aussi juste pour vous faire savoir qu'il a encore été changé en 2.2. *
André Ferraz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.