2015-10-11 106 views
0

我有N個工人消耗我的RabbitMQ任務。但我希望他們能夠同時使用多個任務。RabbitMQ - 同時處理多個任務

我讀了關於prefetch_count參數可以讓我這樣做,但它不起作用。

這是我在Python代碼,使用鼠兔庫:

import pika 
import time 

connection = pika.BlockingConnection(pika.ConnectionParameters(
    host='localhost')) 
channel = connection.channel() 

channel.queue_declare(queue='task_queue', durable=True) 
print(' [*] Waiting for messages. To exit press CTRL+C') 


def callback(ch, method, properties, body): 
    print(" [x] Received %r" % (body,)) 
    time.sleep(body.count(b'.')) 
    print(" [x] Done") 
    ch.basic_ack(delivery_tag=method.delivery_tag) 

channel.basic_qos(prefetch_count=2) # Here I should be able to handle 2 tasks in the same time 
channel.basic_consume(callback, 
         queue='task_queue') 

channel.start_consuming() 

不幸的是,如果當前處理(所以,basic_ack沒有派尚)任務,回調不叫第二任務。它等待當前完成的任務開始下一個任務。

回答

0

我認爲你的代碼在同一個線程上同步運行。

將prefetch設置爲1,然後在您的計算機上創建消費者進程的2個實例。這將同時運行兩名工人。

或者,你可以做多線程...但我不喜歡多線程,親自。我發現管理一個進程的更多實例比管理線程更容易。

the RMQ tutorials for python中的示例將此示例顯示爲從多個消費者獲得並行處理的方式