【发布时间】:2016-03-27 14:42:48
【问题描述】:
我正在和 rabbitmq 一起做一些练习。
但rabbmitmq的行为与官网教程不同。
worker 和task_sender 使用以下代码连接rabbitmq。
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue')
和task_sender通过调用发送任务
for i in range(10):
message = "job%s %d %s" % (str(random.randint(1,10)), i , '.'*i)
channel.basic_publish(exchange='',
routing_key='task_queue',
body=message,
properties=pika.BasicProperties(
delivery_mode = 2, # make message persistent
))
和worker通过调用获取任务并等待一段时间。
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
time.sleep(body.count(b'.'))
print(" [x] Job Done!")
ch.basic_ack(delivery_tag = method.delivery_tag)
channel.basic_consume(callback,
queue='task_queue',
no_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
首先我运行task_sender.py 发送十个作业,并且进展顺利。
但是当我在不同的 shell 中启动两个 worker.py 时,似乎只有一个工作人员在获取任务,而另一个工作人员什么也不做。
更重要的是,当正在工作的worker 完成队列中的所有作业时,我再次运行task_sender.py 以发送新任务,workers 不再获取作业。
看来rabbitmq正在阻塞,我该如何解决?
这是我的Rabbitmq status
欢迎任何帮助,在此先感谢。
【问题讨论】:
标签: python rabbitmq message-queue