Alterações na configuração da fila de mensagens no Magento 2 EE 2.1


10

Eu estive analisando a funcionalidade de filas de mensagens EE, mas parece que ela está incompleta.

Antes da versão 2.1, havia uma implementação razoavelmente funcional que permitia criar um etc/queue.xmlpara definir editores, tópicos, consumidores e filas, conforme descrito na documentação oficial: http://devdocs.magento.com/guides/v2.0/config-guide /mq/config-mq.html .

Havia limitações como não foi possível criar ligações, a menos que correspondessem a um tópico definido na configuração, o que limitava a flexibilidade, pois era necessário definir todas as possibilidades de tópicos possíveis antecipadamente. A falta de um script de instalação recorrente também significava que você precisava fazer um pouco de hacking para que o script do instalador fosse executado novamente.

A partir da versão 2.1, os elementos publicador, tópico, consumidor e ligação etc/queue.xmlforam descontinuados e a configuração é dividida entre etc/queue.xmle etc/communication.xml, como pode ser visto aqui: https://github.com/magento/magento2-samples/blob/master/sample- módulo-amostra-mensagem-fila / etc / . O esquema / editor / tópico / consumidor / ligação descontinuado ainda pode ser usado isoladamente, mas não em conjunto com o esquema do broker / fila revisado.

No entanto, nada disso apareceu na documentação oficial e não está claro imediatamente por que a configuração foi dividida e requer duplicação em alguns casos. Mais importante, parece não haver um recurso para definir a ligação agora, com o nome do tópico sendo usado como a chave de roteamento. Isso, por sua vez, também torna impossível o uso de caracteres especiais para filas de ligação. Portanto, parece ter sido refatorado, mas perdeu a funcionalidade.

Em uma observação positiva, o magento/module-amqpmódulo agora usa um script de instalação recorrente para que as alterações na configuração da fila sejam instaladas quando você executar magento setup:upgrade. Essa alteração ainda não foi aplicada ao magento/module-mysql-mqmódulo.

Então, eu gostaria de saber: a) Entendi tudo errado e há realmente uma maneira de criar ligações e é mais flexível do que parece? b) Por que a configuração foi dividida?


Como observação lateral, ao experimentar isso, usei um dos exemplos de topologia dos tutoriais do RabbitMQ em https://www.rabbitmq.com/tutorials/tutorial-four-php.html :

insira a descrição da imagem aqui

Essa configuração descontinuada alcançou a topologia para a maior 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>

ATUALIZAÇÃO: A documentação foi atualizada. Os curingas agora não são suportados, portanto, a flexibilidade de uma troca de tópicos é tornada nula. Então, tentei recriar a seguinte troca direta:

insira a descrição da imagem aqui

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>

No entanto, quando você executa os consumidores, apenas o tópico "verde" é roteado para o consumidor. Dois, ele ignora o tópico "preto". Portanto, parece que o melhor que pode ser alcançado é uma troca direta com apenas uma ligação por fila e consumidor.

Respostas:


1

Obrigado @KHarper, a documentação atualizada é muito útil. Infelizmente, isso confirma que a flexibilidade da configuração da fila foi reduzida.
philpot

Eu adicionei uma atualização à postagem original detalhando a flexibilidade limitada. Espero que você possa aconselhar se existe uma maneira de criar a topologia de troca direta.
philpot

Também para que você saiba que foi alterado novamente no 2.2. *
André Ferraz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.