我正在学习AMQP,所以这可能是对我所做工作的误解。我正试图在我自己的私有服务器上设置rabbitmq,以便为一个系统场(我有一堆需要处理的图像)提供服务。我建立了一个三步走的管道:| put image on queue | --work_queue--> | process | --results--> | archive results |
我安装了rabbitmq,并在服务器上创建了两个队列“工作队列”和“结果”。我使用amqplib编写了一些python脚本,并且使用一个图像处理器worker可以很好地处理管道。我已经在队列中添加了100个图像,我的一台机器很高兴一次抓取一个图像,然后快速地处理数据,并将结果放入结果队列。在
问题是,我假设如果我在另一台机器上启动另一个图像处理程序,它也会将工作从队列中拉出来。这似乎正是rabbitmq站点上的“工作队列”教程中列出的情况。我以为这会管用。然而,真正发生的是,不管我开始工作的其他工人有多少,他们只是永远地等待,永远也得不到任何工作,即使在工作队列中有大量的消息在等待。在
我误解了什么?在服务器上对工作进行排队的相关代码:
^{pr2}$
以及流程工人的消费者方面:from amqplib import client_0_8 as amqp
conn = amqp.Connection(host="foo:5672 ", userid="pipeline",
password="XXXXX", virtual_host="/", insist=False)
chan = conn.channel()
def work_callback(msg):
....
while True:
chan.basic_consume(callback=work_callback, queue='work_queue')
try:
chan.wait()
except keyboardInterrupt:
print "\nExiting cleanly"
sys.exit(0)
我看到其他工人都有联系:$ sudo rabbitmqctl list_queues
Listing queues ...
results 0
work_queue 246
...done.
$ sudo rabbitmqctl list_connections
Listing connections ...
pipeline 192.168.8.1 41553 running
pipeline XX.YY.ZZ.WW 46676 running
pipeline 192.168.8.4 44482 running
pipeline 192.168.8.6 41884 running
...done.
在哪里二十、 YY.ZZ号.WW是外部IP。192.168.8.6的工作线程在队列中忙得不可开交,然而外部IP上的工作线程却无所事事,而246条消息则在队列中等待,而它应该等待的队列中等待。在
有什么想法?在