Modifiche alla configurazione della coda dei messaggi in Magento 2 EE 2.1


10

Ho esaminato la funzionalità delle code dei messaggi EE, ma sembra che sia incompleta.

Prima della 2.1 c'era un'implementazione ragionevolmente funzionale che ti permetteva di creare un etc/queue.xmlper definire editori, argomenti, consumatori e code come descritto nella documentazione ufficiale: http://devdocs.magento.com/guides/v2.0/config-guide /mq/config-mq.html .

Vi erano limitazioni come l'impossibilità di creare associazioni a meno che non corrispondessero a un argomento definito nella configurazione, il che limitava la flessibilità in quanto dovevi definire tutte le possibili possibilità di argomenti in anticipo. La mancanza di uno script di installazione ricorrente significava anche che dovevi fare un po 'di hacking per riavviare lo script del programma di installazione.

A partire dal 2.1 l'editore, l'argomento, il consumatore e gli elementi di bind etc/queue.xmlsono stati deprecati e la configurazione è divisa tra etc/queue.xmle etc/communication.xml, come si può vedere qui: https://github.com/magento/magento2-samples/blob/master/sample- module-sample-message-queue / etc / . Lo schema editore / topic / consumer / bind obsoleto può ancora essere utilizzato in modo isolato, ma non in combinazione con lo schema di coda / broker modificato.

Tuttavia, nulla di tutto questo è apparso nella documentazione ufficiale e non è immediatamente chiaro il motivo per cui la configurazione è stata suddivisa e richiede la duplicazione in alcuni casi. Ancora più importante, non sembra esserci una funzione per definire l'associazione ora, con invece il nome dell'argomento usato come chiave di routing. Questo a sua volta rende anche impossibile usare caratteri speciali per legare le code. Quindi sembra essere stato refactored ma ha perso la funzionalità.

Una nota positiva, il magento/module-amqpmodulo ora utilizza uno script di installazione ricorrente in modo che le modifiche alla configurazione della coda vengano installate durante l'esecuzione magento setup:upgrade. Questa modifica non è stata ancora applicata al magento/module-mysql-mqmodulo.

Quindi mi piacerebbe sapere: a) Ho sbagliato tutto e in realtà esiste un modo per creare associazioni ed è più flessibile di quanto sembri? b) Perché la configurazione è stata suddivisa?


Come nota a margine, mentre ho sperimentato questo, ho usato uno degli esempi di topologia dei tutorial RabbitMQ su https://www.rabbitmq.com/tutorials/tutorial-four-php.html :

inserisci qui la descrizione dell'immagine

Questa configurazione obsoleta ha ottenuto la topologia per la maggior 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>

AGGIORNAMENTO: la documentazione è stata ora aggiornata. I caratteri jolly non sono ora supportati, quindi la flessibilità di uno scambio di argomenti è resa nulla. Quindi ho provato a ricreare il seguente scambio diretto:

inserisci qui la descrizione dell'immagine

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>

Tuttavia, quando si eseguono i consumatori, solo l'argomento "verde" viene indirizzato a consumerTwo, ignora l'argomento "nero". Quindi sembra che il meglio che si possa ottenere sia uno scambio diretto con un solo binding per coda e consumatore.

Risposte:


1

Grazie @KHarper, la documentazione aggiornata è molto utile. Purtroppo conferma che la flessibilità della configurazione della coda è stata ridotta.
philpot,

Ho aggiunto un aggiornamento al post originale che descrive in dettaglio la flessibilità limitata, speriamo che sarai in grado di avvisare se esiste un modo per creare la topologia di scambio diretto.
philpot,

Anche solo per farti sapere che è stato nuovamente modificato in 2.2. *
André Ferraz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.