मैं ईई संदेश कतारों की कार्यक्षमता को देख रहा हूं, लेकिन ऐसा लगता है कि यह अधूरा है।
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- मॉड्यूल-नमूना-संदेश-कतार / आदि / । हटाए गए प्रकाशक / विषय / उपभोक्ता / बाइंड स्कीमा का उपयोग अभी भी अलगाव में किया जा सकता है, लेकिन संशोधित ब्रोकर / कतार स्कीमा के साथ संयोजन में नहीं।
हालांकि, आधिकारिक दस्तावेज में इसका कुछ भी नहीं दिखाई दिया है और इसकी तुरंत स्पष्ट नहीं है कि कॉन्फ़िगरेशन क्यों विभाजित किया गया है और कुछ मामलों में दोहराव की आवश्यकता है। इससे भी महत्वपूर्ण बात यह है कि अब बाइंडिंग को परिभाषित करने की सुविधा नहीं है, इसके बजाय रूटिंग कुंजी के रूप में उपयोग किए जाने वाले विषय नाम के साथ। यह बदले में बाध्यकारी कतारों के लिए विशेष वर्णों का उपयोग करना भी असंभव बनाता है। तो ऐसा प्रतीत होता है कि रिफैक्टेड लेकिन खोई हुई कार्यक्षमता है।
एक सकारात्मक नोट पर, magento/module-amqp
मॉड्यूल अब एक आवर्ती इंस्टॉलर स्क्रिप्ट का उपयोग करता है इसलिए जब आप चलते हैं तो कतार कॉन्फ़िगरेशन परिवर्तन स्थापित होते हैं magento setup:upgrade
। यह परिवर्तन magento/module-mysql-mq
अभी तक मॉड्यूल पर लागू नहीं किया गया है ।
इसलिए मैं जानना चाहता हूं: क) क्या मुझे यह सब गलत लगा है और वास्तव में बाइंडिंग बनाने का तरीका है और यह जितना लगता है उससे कहीं अधिक लचीला है? बी) कॉन्फ़िगरेशन क्यों विभाजित किया गया है?
एक साइड नोट के रूप में, जैसा कि मैं इसके साथ प्रयोग कर रहा हूं, मैं 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>
हालाँकि, जब आप उपभोक्ताओं को चलाते हैं, तो केवल "हरे" विषय को उपभोक्ताटाउ को रूट किया जाता है, यह "ब्लैक" विषय को अनदेखा करता है। तो ऐसा लगता है कि सबसे अच्छा जो पूरा किया जा सकता है वह एक प्रत्यक्ष विनिमय है जिसमें प्रति पंक्ति और उपभोक्ता केवल एक बंधन है।