2011-11-28 19 views
9

मेरे पास एक साधारण खरगोश एमक्यू परीक्षा कार्यक्रम यादृच्छिक रूप से संदेश लिख रहा है, और दूसरा उन्हें पढ़ रहा है, सभी वसंत-एएमक्यूपी का उपयोग कर रहे हैं। यदि उपभोक्ता मर जाता है (उदाहरण के लिए अपने कनेक्शन या चैनल को बंद करने का मौका दिए बिना प्रक्रिया को मारना), तो जो भी संदेश स्वीकार नहीं किया गया है वह हमेशा के लिए अनजान रहता है।कोई कनेक्शन के साथ AMQP/RabbitMQ चैनल कब मरता है?

मैंने कई संदर्भ देखे हैं (उदाहरण के लिए this question) जो कहते हैं कि चैनल के पास कोई कनेक्शन नहीं होने पर मर जाता है, और शेष अनचाहे संदेशों को फिर से वितरित किया जाएगा। यह वह व्यवहार नहीं है जिसे मैं देखता हूं - इसके बजाय मुझे आईडीएल चिह्नित चैनलों की बढ़ती सूची मिलती है और चल रहे चिह्नित कनेक्शन की बढ़ती सूची है लेकिन बिना गतिविधि के।

क्या कुछ कॉन्फ़िगरेशन आवश्यक है कि प्रक्रिया को मारने के बाद कनेक्शन मर जाए?

संपादित करें: मैं एक VirtualBox वी एम, जो जाहिरा तौर पर सही ढंग से नेट से अधिक मृत भीतर का कनेक्शन का प्रबंधन नहीं है अंदर RabbitMQ सर्वर चल रहा था। यह सीधे भौतिक मेजबान पर चल रहे mq सर्वर के साथ ठीक काम करता है।

+1

एफवाईआई: मुझे ऐसी ही समस्या थी जहां विशेष उपभोक्ता मरने के बाद समय-समय पर ब्रोकर पर विशेष कतार साफ नहीं किया जा रहा था। इसने इन घटकों को निर्धारित करने के साथ निर्धारिक नामों से रोका। इसे 'कनेक्शन फ़ैक्टरी.रूक्वेस्टेड हार्टबीट' को एक छोटे से मूल्य (सेकेंड) – drstevens

उत्तर

3

बंद करने का उत्तर दें। यह एक वास्तविक मुद्दा नहीं बनता है।

मैं वर्चुअलबॉक्स वीएम के अंदर खरगोश सर्वर चला रहा था, जो स्पष्ट रूप से एनएटी पर मृत इनबाउंड कनेक्शन का प्रबंधन नहीं करता है। यह सीधे भौतिक मेजबान पर चल रहे mq सर्वर के साथ ठीक काम करता है।

4

एएमक्यूपी क्यूई और एक्सचेंज का उपयोग करता है। आप एक एक्सचेंज पर प्रकाशित करते हैं और आप एक्सचेंजों से संदेश प्राप्त करने के लिए कतार बांधते हैं (आप मेरे ब्लॉग पर short explanation देख सकते हैं। जब आप कोई कतार बनाते हैं तो आप इसे ऑटो-डिलीट करने के साथ सेट कर सकते हैं और साथ ही यह ऑटो से पहले कितना समय तक उपयोग नहीं किया जाएगा । हटाता यहाँ RabbitMQ quickref से एक उद्धरण है:

queue.declare (कम सुरक्षित -1, कतार के नाम कतार, निष्क्रिय सा, थोड़ा टिकाऊ, बिट अनन्य, बिट स्वत: -हटाएं, नहीं- प्रतीक्षा करें, प्रतीक्षा करें तर्क) ➔ घोषणा-ठीक

समर्थन: पूर्ण घोषित कतार, यदि आवश्यक हो तो बनाएं।

यह विधि एक कतार बनाता है या जांचता है। क्लाइंट एक नई कतार बनाने के दौरान कतार और इसकी सामग्री, और कतार के लिए साझा करने के स्तर की स्थायित्व को नियंत्रित करने वाले विभिन्न गुण निर्दिष्ट कर सकते हैं।

खरगोश एमक्यू एएमक्यूपी विनिर्देश के लिए एक्सटेंशन लागू करता है जो को अपने व्यवहार के विभिन्न पहलुओं को नियंत्रित करने के लिए कतार के निर्माता को अनुमति देता है।

प्रति-पंक्ति संदेश टीटीएल यह एक्सटेंशन निर्धारित करता है कि एक कतार में प्रकाशित संदेश कितनी देर तक सर्वर द्वारा छोड़ा जाने से पहले जीवित रह सकता है। टाइम-टू-लाइव x-message-ttl तर्क के साथ इस विधि के तर्क पैरामीटर पर कॉन्फ़िगर किया गया है।

कतार समाप्ति पंक्तियों को वैकल्पिक पट्टे के समय के साथ घोषित किया जा सकता है। लीज समय निर्धारित करता है कि स्वचालित रूप से सर्वर द्वारा हटाए जाने से पहले कितनी देर तक कतार का उपयोग नहीं किया जा सकता है। इस विधि के तर्क पैरामीटर में लीज समय एक्स-एक्सपर्स तर्क के रूप में प्रदान किया जाता है।

प्रतिबिंबित पंक्तियां हमने कतारों के लिए सक्रिय/सक्रिय उच्च उपलब्धता विकसित की है। यह एक खरगोश एमक्यू क्लस्टर के भीतर अन्य नोड पर कतारों को प्रतिबिंबित करने की अनुमति देकर काम करता है। नतीजा यह है कि क्लस्टर विफल होने का एक नोड होना चाहिए, कतार स्वचालित रूप से दर्पणों में से एक पर स्विच कर सकती है और सेवा की अनुपलब्धता के साथ संचालित हो सकती है। एक प्रतिबिंबित कतार बनाने के लिए, आप इस विधि के तर्क पैरामीटर में एक x-ha-policy तर्क प्रदान करते हैं।

+0

पर सेट करके हल किया गया था, मैं नहीं चाहता कि कतार को हटाया जाए, मैं इसे लगातार रखना चाहता हूं। लेकिन मैं अनचाहे संदेश भी चाहता हूं (स्वीकृति से पहले मरने वाली प्रक्रियाओं द्वारा खपत) को पुनः प्राप्त करने के लिए। यह मृत कनेक्शन/चैनल हैं जिन्हें संदेशों को हटाने की आवश्यकता है, संदेश नहीं। –

+2

ठीक है अब मुझे मिल गया - आपको कनेक्शन पैरामीटर उदाहरण बनाने की आवश्यकता है और एक उचित मूल्य (दिल की धड़कन मिस चैनल बंद कर देगा) पर दिल की धड़कन (setRequestedHardardbeat) सेट करें, फिर कनेक्शन कनेक्शन फैक्टरी कन्स्ट्रक्टर –

+0

@ ऑरॉन रोटेम-गैल-ओज़, सेटिंग में पास करें 'अनुरोधित हार्टबीट' ने मेरी इसी तरह की समस्या को हल किया जो कि विशेष कतारों द्वारा प्रकट हो रहा था जो दलाल पर समय-समय पर साफ नहीं किया जा रहा था। इसने घटकों को रोक दिया जो प्रारंभिक कतारों को निर्धारित करने के साथ निर्धारित नामों के साथ घोषित करते हैं। – drstevens

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