Konfigurasi antrian pesan berubah di Magento 2 EE 2.1

10

Saya telah melihat fungsionalitas antrian pesan EE, tetapi sepertinya itu tidak lengkap.

Sebelum 2.1 ada implementasi fungsional yang memungkinkan Anda untuk membuat etc/queue.xmlmendefinisikan penerbit, topik, konsumen dan antrian seperti yang dijelaskan dalam dokumentasi resmi: http://devdocs.magento.com/guides/v2.0/config-guide /mq/config-mq.html .

Ada batasan seperti tidak dapat membuat binding kecuali mereka cocok dengan topik yang ditentukan dalam konfigurasi, yang membatasi fleksibilitas karena Anda harus menentukan semua kemungkinan topik yang mungkin ada di muka. Kurangnya skrip instal yang berulang juga berarti Anda harus melakukan sedikit peretasan agar skrip installer dapat berjalan kembali.

Pada 2.1 penerbit, topik, konsumen dan elemen mengikat etc/queue.xmltelah ditinggalkan dan konfigurasi dibagi antara etc/queue.xmldan etc/communication.xml, seperti yang dapat dilihat di sini: https://github.com/magento/magento2-samples/blob/master/sample- module-sample-message-queue / etc / . Skema penerbit / topik / konsumen / mengikat yang sudah usang masih dapat digunakan secara terpisah, tetapi tidak bersamaan dengan skema broker / antrian yang direvisi.

Namun, tidak satu pun dari ini muncul dalam dokumentasi resmi dan tidak segera jelas mengapa konfigurasi telah terpecah dan memerlukan duplikasi dalam beberapa kasus. Lebih penting lagi, tampaknya tidak ada fasilitas untuk mendefinisikan ikatan sekarang, dengan nama topik yang digunakan sebagai kunci perutean. Ini pada gilirannya juga membuat tidak mungkin untuk menggunakan karakter khusus untuk mengikat antrian. Jadi tampaknya telah refactored tetapi kehilangan fungsionalitas.

Pada catatan positif, magento/module-amqpmodul sekarang menggunakan skrip penginstal berulang sehingga perubahan konfigurasi antrian diinstal saat Anda menjalankan magento setup:upgrade. Namun perubahan ini belum diterapkan pada magento/module-mysql-mqmodul.

Jadi saya ingin tahu: a) Apakah saya salah semua ini dan sebenarnya ada cara untuk membuat binding dan lebih fleksibel daripada yang terlihat? b) Mengapa konfigurasi terpecah?


Sebagai catatan, karena saya telah bereksperimen dengan ini, saya telah menggunakan salah satu contoh topologi dari tutorial RabbitMQ di https://www.rabbitmq.com/tutorials/tutorial-four-php.html :

masukkan deskripsi gambar di sini

Konfigurasi yang ditinggalkan ini mencapai topologi untuk sebagian besar:

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>

UPDATE: Dokumentasi sekarang telah diperbarui. Wildcard sekarang tidak didukung, sehingga fleksibilitas pertukaran topik dianggap nol. Jadi saya mencoba membuat ulang pertukaran langsung berikut:

masukkan deskripsi gambar di sini

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>

Namun, ketika Anda menjalankan konsumen, hanya topik "hijau" yang dialihkan ke consumerTwo, ia mengabaikan topik "hitam". Jadi sepertinya yang terbaik yang dapat dicapai adalah pertukaran langsung dengan hanya satu ikatan per antrian dan konsumen.

philpot
sumber

Jawaban:

1

Kami telah menerbitkan dokumentasi tentang antrian pesan 2.1 di http://devdocs.magento.com/guides/v2.1/config-guide/mq/config-mq.html dan http://devdocs.magento.com/guides/ v2.1 / config-guide / mq / queue-migration.html

K Harper
sumber
Terima kasih @KHarper, dokumentasi yang diperbarui sangat membantu. Sayangnya itu tidak mengkonfirmasi bahwa fleksibilitas konfigurasi antrian telah berkurang.
philpot
Saya telah menambahkan pembaruan ke posting asli yang merinci fleksibilitas terbatas, semoga Anda dapat memberi saran jika ada cara untuk membuat topologi pertukaran langsung.
philpot
Juga hanya untuk memberi tahu Anda bahwa itu telah diubah lagi di 2.2. *
André Ferraz