2010-08-11 33 views
21

मैं कैसे जांच सकता हूं कि कोई संदेश कतार पहले से मौजूद है या नहीं?मैं कैसे जांच सकता हूं कि एक RabbitMQ संदेश कतार मौजूद है या नहीं?

मेरे पास 2 अलग-अलग एप्लिकेशन हैं, एक कतार बना रहा है और उस कतार से अन्य पढ़ना है।

तो यदि मैं क्लाइंट चलाता हूं जो पहले कतार से पढ़ता है, तो इससे दुर्घटनाग्रस्त हो जाता है।
तो इससे बचने के लिए मैं पहले जांचना चाहूंगा कि कतार मौजूद है या नहीं।

QueueingBasicConsumer <ConsumerName> = new QueueingBasicConsumer(<ChannelName>); 
<ChannelName>.BasicConsume("<queuename>", null, <ConsumerName>); 
BasicDeliverEventArgs e = (BasicDeliverEventArgs)<ConsumerName>.Queue.Dequeue(); 
+0

यहां कोड स्निपेट है जिसे मैंने कतार क्यूईइंग बेसिककंस्यूमर <उपभोक्ता नाम> = नया कतार BASICConsumer () पढ़ा है; बेसिक कॉन्स्यूम ("", शून्य, <उपभोक्ता नाम>); बेसिकडिलीवरएवेंटआर्ग ई = (बेसिकडिलीवरएवेंटआआरजीएस) <उपभोक्ता नाम>। क्यूयू.डेक्यू(); –

+0

मैंने आपके पोस्ट में कोड स्निपेट जोड़ा है। भविष्य में, कृपया टिप्पणी जोड़ने के बजाय, अधिक संदर्भ जोड़ते समय ** संपादित करें ** लिंक पर क्लिक करें।अधिक जानकारी के लिए, अनुभाग ** _ मुझे कब टिप्पणी करनी चाहिए? _ ** [टिप्पणियों के लिए सहायता पृष्ठ] पर जाएं (https://stackoverflow.com/help/privileges/comment)। –

उत्तर

40

जाँच परेशान न हों:

यहाँ कैसे मैं कतार पढ़ के कोड का टुकड़ा है।

queue.declare एक बेवकूफ ऑपरेशन है। तो, यदि आप इसे एक बार चलाते हैं, दो बार, एन बार, परिणाम अभी भी वही होगा।

यदि आप यह सुनिश्चित करना चाहते हैं कि कतार मौजूद है, तो इसे उपयोग करने से पहले इसे घोषित करें। सुनिश्चित करें कि आप इसे हर समय एक ही स्थायित्व, विशिष्टता, स्वत: हटाए गए नस्ल के साथ घोषित करते हैं, अन्यथा आपको अपवाद मिलेगा।

यदि आपको वास्तव में यह जांचने की आवश्यकता है कि कोई कतार मौजूद है (आपको सामान्य रूप से आवश्यकता नहीं है), कतार की निष्क्रिय घोषणा करें। यदि कतार मौजूद है, तो यह ऑपरेशन सफल हो जाता है, या अगर यह त्रुटि में विफल रहता है।

+1

क्या आप सी # एपीआई –

+4

में कतार को निष्क्रिय रूप से घोषित करने के लिए सिंटेक्स का उल्लेख कर सकते हैं IModel.QueueDeclare का उपयोग करें और सत्य को निष्क्रिय रखें। http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v1.8.1/rabbitmq-dotnet-client-1.8.1-client-htmldoc/html/type-RabbitMQ.Client.IModel.html – scvalex

+0

मैंने किया इसका उपयोग करने से पहले कतार घोषित करें .. ठीक काम किया .. धन्यवाद –

0

यह ऐसी स्थिति में काम नहीं करेगा जब कोई अन्य (अन्य एप्लिकेशन) q घोषणा के लिए ज़िम्मेदार है। और मैं बस क्यू के सभी पैरामीटर, बस नाम नहीं जानता था।

मैं नहीं बल्कि passiveDeclare का उपयोग करें और क्ष मौजूद नहीं है कि

0

वर्तमान में आप और अधिक RabbitMQ Management HTTP API सोचा कि जानकारी को जानते हैं और कर सकते हैं IOException के लिए जाँच करेगा।

उदाहरण के लिए, यह जानने के लिए कि इस समय एक कतार ऊपर है या नहीं, आप एपीआई के /एपीआई/क्यूई/vhost/name इंटरफ़ेस प्राप्त करने के लिए आमंत्रित कर सकते हैं।

0

सुझाए गए अनुसार इसे करने के लिए QueueDeclare() का उपयोग करें। साथ ही, हमने जो भी किया है, वह कतार का उपभोक्ता कतार का मालिक बन गया है, और हमेशा एक्सचेंजों को प्रकाशित करता है जो प्रकाशकों द्वारा बनाए और स्वामित्व में हैं। उपभोक्ता तब अपने कतारों को उन एक्सचेंजों से जोड़ते हैं जिन्हें वे यातायात प्राप्त करना चाहते हैं और वे चाहते हैं कि वे यातायात के लिए उचित मार्ग कुंजी फ़िल्टर का उपयोग करें। इस तरह, प्रकाशकों को गैर-टिकाऊ कतारों के लिए उपभोक्ताओं द्वारा म्यूट कर दिया जाता है, और उपभोक्ता आने के लिए स्वतंत्र होते हैं और टिकाऊ या गैर-टिकाऊ कतारों के साथ उपयुक्त मार्ग कुंजी के साथ मैप किए जाते हैं।

इसका परिणाम आसानी से प्रशासित सिस्टम में होता है और वेब प्रशासन को एक टिकाऊ कतार बनाने और इसे एक एक्सचेंज में बांधने, कुछ ट्रैफिक प्राप्त करने, इसे अनबाइंड करने के लिए उपयोग करने की अनुमति देता है, और फिर यह समझने के लिए कतार सामग्री का निरीक्षण करता है कि ट्रैफ़िक और लोड क्या है एक्सचेंज के माध्यम से आ रहा है।

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

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