में सभी संदेशों का उपभोग करने लगता है। मेरे पास एक पायथन कार्यकर्ता क्लाइंट है जो 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 तैयार रहो।
यह क्यों काम नहीं कर रहा है?
धन्यवाद! इस मुद्दे को हल किया। और बीटीडब्ल्यू डीबग करना बहुत मुश्किल है .. – Sajuuk
@ हियागारा हाँ बस आज ही इसमें भाग गया। आश्चर्यजनक है कि लगभग 5 साल बाद यह अभी भी एपीआई में स्पष्ट या दस्तावेज नहीं है। – Jordan