ฉันได้ดูการทำงานของคิวข้อความ EE แต่ดูเหมือนว่าจะไม่สมบูรณ์
ก่อนหน้า 2.1 มีการใช้งานที่สมเหตุสมผลซึ่งอนุญาตให้คุณสร้าง a 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/magento/magento2-samples/blob/master/sample- โมดูลตัวอย่างข้อความคิว / etc / ผู้เผยแพร่ / หัวข้อ / consumer / bind ที่เลิกใช้แล้วนั้นยังสามารถใช้แยกกันได้ แต่ไม่สามารถใช้ร่วมกับ schema โบรกเกอร์ / คิวที่ปรับปรุงใหม่ได้
อย่างไรก็ตามไม่มีสิ่งนี้ปรากฏในเอกสารอย่างเป็นทางการและไม่ชัดเจนในทันทีว่าทำไมการกำหนดค่าจึงถูกแยกออกและจำเป็นต้องทำซ้ำในบางกรณี ที่สำคัญดูเหมือนว่าจะไม่มีสิ่งอำนวยความสะดวกในการกำหนดการเชื่อมโยงในขณะนี้ด้วยชื่อหัวข้อที่ใช้เป็นรหัสเส้นทางแทน สิ่งนี้จะทำให้ไม่สามารถใช้อักขระพิเศษสำหรับการผูกคิวได้ ดังนั้นจึงดูเหมือนว่าได้รับการปรับโครงสร้างใหม่ แต่การทำงานที่สูญเสีย
เมื่อทราบบวกโมดูลตอนนี้ใช้สคริปต์ติดตั้งที่เกิดขึ้นเพื่อให้มีการเปลี่ยนแปลงการตั้งค่าคิวมีการติดตั้งเมื่อคุณเรียกใช้magento/module-amqp
magento setup:upgrade
การเปลี่ยนแปลงนี้ยังไม่ถูกนำไปใช้กับmagento/module-mysql-mq
โมดูล
ดังนั้นฉันอยากรู้ว่า: a) ฉันผิดทั้งหมดและมีวิธีสร้างการผูกและยืดหยุ่นกว่าที่คิดหรือไม่ b) ทำไมการกำหนดค่าจึงถูกแบ่ง?
ตามบันทึกข้างเป็นฉันได้รับการทดสอบด้วยนี้ฉันได้รับการใช้หนึ่งในตัวอย่างที่โทโพโลยีจากบทเรียน RabbitMQ ที่https://www.rabbitmq.com/tutorials/tutorial-four-php.html :
การกำหนดค่าที่เลิกใช้นี้ทำให้โทโพโลยีเป็นส่วนใหญ่:
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: เอกสารได้รับการปรับปรุงแล้ว ขณะนี้ไม่รองรับการใช้สัญลักษณ์แทนความยืดหยุ่นในการแลกเปลี่ยนหัวข้อจึงเป็นโมฆะ ดังนั้นฉันจึงพยายามสร้างการแลกเปลี่ยนโดยตรงต่อไปนี้ขึ้นใหม่:
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 มันจะละเว้นหัวข้อ "สีดำ" ดังนั้นดูเหมือนว่าสิ่งที่ดีที่สุดที่สามารถทำได้คือการแลกเปลี่ยนโดยตรงโดยมีเพียงหนึ่งการผูกมัดต่อคิวและผู้บริโภค