我对Python中的RabbitMQ实现PIKA有一个问题。我想使用队列中的1条消息,使用它,并在工作完成后确认它。然后应该接收到下一条消息。
我使用了prefetch_count =1选项,告诉rabbitMQ,这个消费者一次只需要一条消息,在此消息被确认之前不需要新消息。
下面是我的(非常简单的)代码:
credentials = pika.PlainCredentials("username","password")
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='1.2.3.4', credentials=credentials))
channel = connection.channel()
def consume(ch, method, properties, body):
time.sleep(5) # Here is the work, now just hold 5 seconds
ch.basic_ack(method.delivery_tag)
def init():
channel.basic_consume(
queue="raw.archive", on_message_callback=consume, auto_ack=False)
channel.basic_qos(prefetch_count=1)
channel.start_consuming()
if __name__ == "__main__":
init()因此,我的问题是,为什么rabbitmq发送的文档(40/秒)比确认的(0.20/秒,更正,因为暂停5秒)更多。这两者不应该是平等的吗?此外,Unacked (1650)不应该大于1,因为它不应该传递任何文档,直到这个文档被认可为止。


第二个视图显示,使用者没有预取计数。但是在连接上设置了预取计数。也许我必须把它设置为消费者,但我不知道,如何设置这个。
我做错了什么?
提前谢谢。
发布于 2019-12-17 13:21:41
正如马塞尔所证实的
问题与在通道上设置basic_qos的时间有关。它似乎应该在basic_consume之前设置。
def init():
channel.basic_qos(prefetch_count=1)
channel.basic_consume(
queue="raw.archive", on_message_callback=consume, auto_ack=False)
channel.start_consuming()https://stackoverflow.com/questions/59323174
复制相似问题