2013-07-16 14 views
10

संदेश वाले संदेशों की कुल गणना प्राप्त करें मेरे पास जावा क्लाइंट है जो RabbitMQ कतार पर नज़र रखता है। मैं इस कोडRabbitMQ -

@Resource 
RabbitAdmin rabbitAdmin; 
.......... 

DeclareOk declareOk = rabbitAdmin.getRabbitTemplate().execute(new ChannelCallback<DeclareOk>() { 
     public DeclareOk doInRabbit(Channel channel) throws Exception { 
      return channel.queueDeclarePassive("test.pending"); 
     } 
    }); 
    return declareOk.getMessageCount(); 

साथ कतार में संदेशों के संख्या प्राप्त करने में सक्षम हूँ मैं की तरह कुछ और अतिरिक्त विवरण प्राप्त करना चाहते हैं - वर्तमान में कतारबद्ध मदों की

  1. संदेश शरीर।
  2. कतार में बनाए गए संदेशों की कुल संख्या कतार के बाद से बनाई गई थी।

क्या जावा क्लाइंट में इन डेटा को पुनर्प्राप्त करने का कोई तरीका है?

उत्तर

11

एएमक्यूपी प्रोटोकॉल (RabbitMQ कार्यान्वयन सहित) के साथ आपको 100% गारंटी के साथ ऐसी जानकारी नहीं मिल सकती है।

संदेश गिनती की सबसे नज़दीकी संख्या संदेश AMMP क्लाइंट लाइब्रेरी में queue.declare-ok (AMQP.Queue.DeclareOk) के साथ लौटाई गई है।

जबकि queue.declare-ok के साथ आपको प्राप्त होने वाली संदेश गणना सटीक संदेश संख्या एनक्यूज़ से मेल खाती हैं, तो आप इस पर भरोसा नहीं कर सकते क्योंकि यह लेन-देन के दौरान कतार में स्वीकार या प्रकाशित होने वाले संदेशों की गणना नहीं करता है लेकिन अभी तक प्रतिबद्ध नहीं है।

यह वास्तव में निर्भर करता है कि आपको किस तरह की सटीकता की आवश्यकता है।

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

आप Management Plugin, RabbitMQ Management HTTP API और rabbitmqctl उपयोग के साथ संदेशों की गिनती के बारे में कुछ जानकारी प्राप्त कर सकते हैं (list_queues, list_channels देखें)।

कतार के निर्माण के बाद से आपको कुल प्रकाशित संदेश गिनती नहीं मिल सकती है और मुझे लगता है कि कोई भी बेकार होने पर इस तरह के आंकड़ों को लागू नहीं करता है (एफवाईआई, औसत 10k प्रति सेकेंड में संदेश प्रवाह के साथ आप कुछ हज़ार वर्षों में uint64 तक नहीं पहुंचेंगे) ।

+0

धन्यवाद। सिर्फ यह पुष्टि करना चाहता था कि इनका समर्थन करने के लिए कोई एपीआई है या नहीं, क्योंकि मुझे इसे कहीं भी दस्तावेज नहीं मिला। –

+1

zaq178miami क्या लिखा है में एक छोटा सुधार: 2 सप्ताह के लिए प्रति सेकंड 10k संदेश कुल 1,463,132,160,000 संदेश हैं। एक हस्ताक्षरित int 64 बिट 2^64 = 18,446,744,073,709,551,615 उससे कहीं अधिक है। –

+0

हाँ, ठीक करने के लिए thx। – pinepain

7
AMQP.Queue.DeclareOk dok = channel.queueDeclare(QUEUE_NAME, true, false, false, queueArgs); 
dok.getMessageCount(); 
+0

क्या ब्रोकर में वर्तमान में कतारों के सभी नाम प्राप्त करने के लिए कोई ऐसा कोड है ??? – Shashank

+1

यदि कतार घोषणा तर्क उन कतारों से अलग हैं तो आपको एक त्रुटि मिलेगी। इसके बजाय queueDeclarePassive का उपयोग करें –

2

curl -i -u guest_uname:guest_password http://localhost:15672/api/queues/%2f/queue_name

http एपीआई के माध्यम से कतार विवरण तक पहुंचने के,

http://public-domain-name:15672/api/queues/%2f/queue_name

स्थानीय होस्ट CLI शीघ्र से आदेश के माध्यम से पंक्ति विवरण तक पहुंचने के, कहाँ, % 2f है डिफ़ॉल्ट vhost "/"