2012-09-14 12 views
11

में सभी संदेशों का उपभोग करने लगता है। मेरे पास एक पायथन कार्यकर्ता क्लाइंट है जो 10 श्रमिकों को स्पिन करता है जो प्रत्येक हुक एक खरगोश एमक्यू कतार पर फैलाता है। इस तरह यह है कि:Pika + RabbitMQ: prefetch = 1 के लिए basic_qos को सेट करना अभी भी कतार

#!/usr/bin/python 
worker_count=10 

def mqworker(queue, configurer): 
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='mqhost')) 
    channel = connection.channel() 
    channel.queue_declare(queue=qname, durable=True) 
    channel.basic_consume(callback,queue=qname,no_ack=False) 
    channel.basic_qos(prefetch_count=1) 
    channel.start_consuming() 


def callback(ch, method, properties, body): 
    doSomeWork(); 
    ch.basic_ack(delivery_tag = method.delivery_tag) 

if __name__ == '__main__': 
    for i in range(worker_count): 
     worker = multiprocessing.Process(target=mqworker) 
     worker.start() 

मुद्दा रहा है कि चैनल पर basic_qos की स्थापना के बावजूद, पहले कार्यकर्ता शुरू करने के लिए, कतार बंद सभी संदेशों को स्वीकार करता है जबकि अन्य वहाँ निष्क्रिय रखने का है। मैं इसे rabbitmq इंटरफ़ेस में देख सकता हूं, यहां तक ​​कि जब मैं worker_count को 1 होने के लिए सेट करता हूं और कतार पर 50 संदेश डंप करता हूं, तो सभी 50 'अनजान' बाल्टी में जाते हैं, जबकि मुझे उम्मीद है कि 1 अनजान हो जाएगा और अन्य 49 तैयार रहो।

यह क्यों काम नहीं कर रहा है?

उत्तर

14

मुझे लगता है कि basic_qos कहां जाकर इसे हल किया गया है।

channel = connection.channel() के बाद इसे रखने से मुझे लगता है कि व्यवहार की अपेक्षा करने के लिए प्रतीत होता है।

+0

धन्यवाद! इस मुद्दे को हल किया। और बीटीडब्ल्यू डीबग करना बहुत मुश्किल है .. – Sajuuk

+0

@ हियागारा हाँ बस आज ही इसमें भाग गया। आश्चर्यजनक है कि लगभग 5 साल बाद यह अभी भी एपीआई में स्पष्ट या दस्तावेज नहीं है। – Jordan

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