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- module-sample-message-queue / etc / . 더 이상 사용되지 않는 게시자 / 주제 / 소비자 / 바인드 스키마는 여전히 독립적으로 사용할 수 있지만 개정 된 브로커 / 큐 스키마와 함께 사용할 수는 없습니다.
그러나이 중 어느 것도 공식 문서에 나타나지 않았으며 구성이 왜 분리되어 어떤 경우에 복제가 필요한지 즉시 명확하지 않습니다. 더 중요한 것은 주제 이름이 라우팅 키로 대신 사용되는 지금 바인딩을 정의하는 기능이없는 것 같습니다. 또한 대기열 바인딩에 특수 문자를 사용할 수 없습니다. 따라서 리팩토링되었지만 기능이 손실 된 것으로 보입니다.
긍정적 인 점에서, magento/module-amqp
모듈은 이제 반복 설치 프로그램 스크립트를 사용하므로 다음을 실행할 때 큐 구성 변경 사항이 설치됩니다 magento setup:upgrade
. 이 변경 사항은 magento/module-mysql-mq
아직 모듈 에 적용되지 않았습니다 .
그래서 나는 알고 싶습니다 : a)이 모든 것을 잘못 가지고 실제로 바인딩을 만드는 방법이 있으며 그것이 보이는 것보다 더 유연합니까? b) 구성이 왜 분리 되었습니까?
부수적으로, 이것을 실험하면서 https://www.rabbitmq.com/tutorials/tutorial-four-php.html 의 RabbitMQ 튜토리얼에서 토폴로지 예제 중 하나를 사용했습니다 .
더 이상 사용되지 않는이 구성은 대부분 토폴로지를 달성했습니다.
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>
그러나 소비자를 실행하면 "녹색"주제 만 consumerTwo로 라우팅되고 "검은"주제는 무시됩니다. 따라서 달성 할 수있는 최선은 대기열과 소비자 당 하나의 바인딩만으로 직접 교환하는 것 같습니다.