import pika

params = pika.URLParameters([URL])
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.queue_declare(queue='test', durable=True)
channel.basic_consume(do_things, queue='test')

try:
    channel.start_consuming()
except KeyboardInterrupt:
    channel.stop_consuming()
except:
    rollbar.report_exc_info()
finally:
    channel.close()
    connection.close()

यह वह कोड है जिसका उपयोग मैं संदेशों का उपभोग करने के लिए करता था। समस्या यह है कि मेरे पास test कतार में 100 संदेश हैं। एक बार जब मैं उपभोक्ता शुरू करता हूं, तो यह सभी 100 संदेश प्राप्त करेगा और इसे एक-एक करके संसाधित करेगा, यानी कतार की स्थिति बन गई: संदेश तैयार: 0, अनैक्ड: 100, कुल: 100। नतीजतन, मैं स्पिन करने में सक्षम नहीं होगा समानांतर में 100 संदेशों को संसाधित करने के लिए नए उपभोक्ताओं को, क्योंकि नए उपभोक्ताओं के लिए कोई संदेश नहीं बचा है (सभी मौजूदा उपभोक्ता द्वारा लिए गए हैं, हालांकि अधिकांश संदेशों को संसाधित नहीं किया गया है)। क्या उपभोक्ता को एक बार में केवल 1 संदेश लेने देने का कोई तरीका है?

1
Harrison 10 अक्टूबर 2018, 08:57

1 उत्तर

सबसे बढ़िया उत्तर

आपको सेवा की गुणवत्ता जो आपके चैनल के लिए वांछित है।

आपके मामले में, prefetch_count वह पैरामीटर है जिसकी आपको आवश्यकता है।

import pika

params = pika.URLParameters([URL])
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.basic_qos(prefetch_count=1)
2
noxdafox 10 अक्टूबर 2018, 12:00