それぞれがRabbitMQキューにフックする10個のワーカーを起動するPythonワーカークライアントがあります。このようなビット:
#!/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インターフェースで確認できます。1に設定worker_count
して50個のメッセージをキューにダンプした場合でも、50個すべてが「未確認」バケットに入れられますが、1個は未確認になり、他の49個は準備。
なぜこれが機能しないのですか?