Magento 2 EE 2.1でのメッセージキュー構成の変更


10

私は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:upgrademagento/module-mysql-mqただし、この変更はまだモジュールに適用されていません。

だから私は知りたいです:a)私はこれをすべて間違っていて、実際にバインディングを作成する方法があり、見た目よりも柔軟ですか?b)構成が分割されているのはなぜですか?


付記として、これを実験してきたので、私はhttps://www.rabbitmq.com/tutorials/tutorial-four-php.htmlにあるRabbitMQチュートリアルのトポロジーの例の1つを使用しています

ここに画像の説明を入力してください

この非推奨の構成は、大部分のトポロジを実現しました。

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>

更新:ドキュメントが更新されました。ワイルドカードはサポートされなくなったため、トピック交換の柔軟性はnullになります。だから私は次の直接交換を再現しようとしました:

ここに画像の説明を入力してください

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にルーティングされ、「黒」のトピックは無視されます。したがって、達成できる最善の方法は、キューとコンシューマごとに1つのバインディングのみを使用した直接交換であるようです。

回答:


1

@KHarperに感謝します。更新されたドキュメントは非常に役に立ちます。残念ながら、キュー構成の柔軟性が低下していることが確認されています。
フィルポット2016

元の投稿に更新を追加して、柔軟性の制限について詳しく説明します。できれば、直接交換トポロジを作成する方法があるかどうかをアドバイスしていただければ幸いです。
フィルポット2016

また、あなたはそれが2.2で再び変更されている知っているようにする*。
アンドレ・Ferrazの
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.