2012-09-26 11 views
13

संदेश भेजने के लिए RabbitMQ का उपयोग करते समय आप मूल रूप से एक्सचेंज, कतार और बाइंडिंग करते हैं। मैंने उनके विचार को समझ लिया है और वे एक-दूसरे से कैसे जुड़े हैं, लेकिन मुझे पूरा यकीन नहीं है कि कौन सा सेट अप करता है।खरगोश एमक्यू: एक्सचेंज, कतार और बाइंडिंग - कौन सा सेटअप करता है?

असल में, मेरे आवेदन में तीन परिदृश्य हैं।

परिदृश्य 1: एक प्रकाशक, कई कार्यकर्ता प्रक्रियाओं

मैं क्या हासिल करना चाहते हैं एक घटक है कि एक कतार में संदेश भेजता है, और वहाँ कई कार्यकर्ता प्रक्रियाओं है कि कि कतार में आइटम संभाल होगा। यह मेरे लिए काफी आसान लगता है। सेटअप इस प्रकार है:

  • एक्सचेंज: 1 कतार
  • बाइंडिंग: कतार विनिमय

के लिए बाध्य है जब भी एक संदेश है 'प्रत्यक्ष'

  • कतार प्रकार के साथ 1 विनिमय एक्सचेंज को भेजा गया, यह कतार में पहुंचा दिया जाता है, और कार्यकर्ता प्रक्रियाओं को उनके कार्य मिलते हैं।

    सब कुछ टिकाऊ होगा।

    तो कौन सेट अप करता है? मेरी राय में:

    • निर्माता विनिमय
    • निर्माता कतार बनाता है बनाता है (के रूप में वहाँ वर्तमान में कोई कार्यकर्ता प्रक्रिया चल हो सकता है, और संदेश अन्यथा खो जाएगा अगर कोई कतार थी)
    • निर्माता बाध्यकारी करता है विनिमय
    • उपभोक्ताओं के लिए कतार के बस कतार

    अधिकार पर सुनने?

    परिदृश्य 2: एक प्रकाशक, कई ग्राहकों, अस्थिर संदेशों

    दूसरे परिदृश्य काफी अलग है। असल में, यह एक पब/उप परिदृश्य है जहां प्रत्येक संदेश प्रत्येक वर्तमान श्रोता क्लाइंट को भेजता है। यदि कोई ग्राहक ऑफ़लाइन जाता है, तो उसे अब संदेश प्राप्त नहीं होते हैं और वे कहीं भी उनके लिए संग्रहीत नहीं होते हैं। इसका मतलब यह है निम्नलिखित स्थापना:

    • एक्सचेंज: प्रकार 'फैनआउट'
    • कतार के साथ 1 विनिमय: n कतार, एक-एक उपभोक्ता
    • बाइंडिंग के लिए: प्रत्येक पंक्ति विनिमय करने के लिए बाध्य करने की आवश्यकता है

    तो कौन सेट अप करता है?मेरी राय में:

    • निर्माता विनिमय
    • उपभोक्ता कतार बनाता है बनाता है (के रूप में यह अपने आप ही कतार है, और निर्माता नहीं पता कर सकते जो कोई संदेशों में रुचि रखता है)
    • उपभोक्ता के लिए अपनी कतार के लिए बाध्यकारी बनाता है विनिमय
    • उपभोक्ता अपनी कतार

    अधिकार को सुनता है?

    परिदृश्य 3: एक उपभोक्ता ऑफ़लाइन हो जाता है तो एक प्रकाशक, कई ग्राहकों, टिकाऊ संदेशों

    मूल रूप से परिदृश्य 2 के रूप में ही है, लेकिन संदेश खो नहीं किया जाना चाहिए। मेरी राय में यह कुछ भी नहीं बदला जाना चाहिए - है ना?

  • +0

    सेटअप करने के लिए उपलब्ध एक तीसरा व्यक्ति है: एक बाहरी व्यवस्थापक। अधिक जानकारी के लिए यह उत्तर किसी अन्य प्रश्न पर देखें: http://stackoverflow.com/questions/6148381/rabbitmq-persistent-message-with-topic-echange/6155733#6155733 –

    +0

    मैंने स्पष्ट रूप से यह नहीं लिखा था, लेकिन सिस्टम बाहरी प्रशासक की आवश्यकता के बिना आत्मनिर्भर रहें। –

    उत्तर

    5

    मुझे लगता है कि तुम क्या कहना सही परिदृश्य 3.

    एक उपभोक्ता चला जाता है ऑफ़लाइन तो आप टिकाऊ कतारों की जरूरत है और कतारों auto_delete'd नहीं किया जा सकता है, तो अगर संदेश खो नहीं किया जाना चाहिए को छोड़कर है।

    बाकी सब कुछ मेरे लिए सही लगता है।

    परिदृश्य 2 के मामले में आप RabbitMQ ऑटो-जेनरेट कतार नाम भी दे सकते हैं और फिर उपभोक्ता डिस्कनेक्ट होने के बाद उन कतारों को स्वत: हटा दिया जाना चाहिए।

    +0

    बहुत बहुत धन्यवाद :-)! –

    संबंधित मुद्दे