2011-11-19 11 views
23

सरल सवाल, लेकिन Google या Pika ओपन सोर्स कोड ने मदद नहीं की। क्या पिका में मौजूदा कतार आकार (आइटम काउंटर) से पूछताछ करने का कोई तरीका है?पिका में क्यूई आकार प्राप्त करें (एएमक्यूपी पायथन)

उत्तर

6

एएमक्यूपी प्रोटोकॉल में कतार आकार प्राप्त करने के दो तरीके हैं। आप या तो Queue.Declare या Basic.Get का उपयोग कर सकते हैं।

यदि आप मूल का उपयोग करते हुए संदेशों का उपभोग कर रहे हैं। कॉन्स्यूम, तो आप तब तक यह जानकारी नहीं प्राप्त कर सकते जब तक कि आप डिस्कनेक्ट (टाइमआउट) और कतार को दोबारा नहीं हटाते, या फिर एक संदेश प्राप्त करें लेकिन इसे न लें। एएमक्यूपी के नए संस्करणों में आप सक्रिय रूप से संदेश की आवश्यकता कर सकते हैं।

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

इसके आसपास एक और तरीका छोड़ना है और sudo rabbitmqctl list_queues -p my_vhost चलाने के लिए पाइप क्लास का उपयोग करना है। फिर सभी कतारों के आकार को खोजने के लिए आउटपुट पार्स करें। यदि आप ऐसा करते हैं तो आपको सामान्य सूडो पासवर्ड न पूछने के लिए /etc/sudoers कॉन्फ़िगर करने की आवश्यकता होगी।

मैं प्रार्थना करता हूं कि अधिक पिका अनुभव वाले किसी और व्यक्ति ने यह इंगित करके जवाब दिया कि आप उन सभी चीजों को कैसे कर सकते हैं जिनका मैंने उल्लेख किया था, इस मामले में मैं पिका डाउनलोड करूंगा और टायर लाऊंगा। लेकिन अगर ऐसा नहीं होता है और आपको पिका कोड को बंदरगाह करने में कठिनाई हो रही है, तो haigha पर एक नज़र डालें। मैंने पाया कि उनके कोड अन्य पायथन एएमक्यूपी क्लाइंट पुस्तकालयों की तुलना में अधिक सरल हैं क्योंकि वे एएमक्यूपी प्रोटोकॉल के करीब रहते हैं।

+0

सुडो rabbitmqctl list_queues -p my_vhost चाल के लिए धन्यवाद, मैं कोशिश करूँगा। – Sebastian

6

क्या आपने PyRabbit को आजमाया है? इसमें get_queue_depth()method है जो आपको लगता है कि आप क्या देख रहे हैं।

+1

मुझे PyRabbit नहीं पता था। आशाजनक लग रहा है, मैं इसे आजमाउंगा! – Sebastian

28

मुझे पता है कि यह प्रश्न थोड़ा पुराना है, लेकिन यहां यह पिका के साथ ऐसा करने का एक उदाहरण है।

एएमक्यूपी और खरगोश एमक्यू के संबंध में, यदि आपने पहले से ही कतार घोषित कर दी है, तो आप passive flag के साथ कतार फिर से घोषित कर सकते हैं और अन्य सभी कतार पैरामीटर को समान रूप से रख सकते हैं। इस घोषणा की प्रतिक्रिया declare-ok में कतार में संदेशों की संख्या शामिल होगी। आप message_count सदस्य से संदेशों की संख्या प्राप्त

<Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])> 
<Method(['frame_type=1', 'channel_number=1', "method=<Queue.DeclareOk(['queue=test', 'message_count=0', 'consumer_count=0'])>"])> 
Messages in queue 0 

:

import pika 

def on_callback(msg): 
    print msg 

params = pika.ConnectionParameters(
     host='localhost', 
     port=5672, 
     credentials=pika.credentials.PlainCredentials('guest', 'guest'), 
    ) 

# Open a connection to RabbitMQ on localhost using all default parameters 
connection = pika.BlockingConnection(parameters=params) 

# Open the channel 
channel = connection.channel() 

# Declare the queue 
channel.queue_declare(
     callback=on_callback, 
     queue="test", 
     durable=True, 
     exclusive=False, 
     auto_delete=False 
    ) 

# ... 

# Re-declare the queue with passive flag 
res = channel.queue_declare(
     callback=on_callback, 
     queue="test", 
     durable=True, 
     exclusive=False, 
     auto_delete=False, 
     passive=True 
    ) 
print 'Messages in queue %d' % res.method.message_count 

यह निम्न प्रिंट होगा:

यहाँ पिका 0.9.5 के साथ एक उदाहरण है।

+1

बहुत बहुत धन्यवाद। आपका उत्तर मेरे लिए मदद करता है। – Evgeniy

9

यहां बताया गया है कि आप पिका का उपयोग करके कतार लंबाई कैसे प्राप्त कर सकते हैं (मान लें कि आप डिफ़ॉल्ट उपयोगकर्ता और स्थानीयहोस्ट पर पासवर्ड का उपयोग कर रहे हैं) अपनी कतार नाम से q_name को प्रतिस्थापित करें।

import pika 
connection = pika.BlockingConnection() 
channel = connection.channel() 
q = channel.queue_declare(q_name) 
q_len = q.method.message_count 
संबंधित मुद्दे