使用线程时,rabbitmq pika不会完成一项以上的工作

时间:2019-02-06 14:50:49

标签: rabbitmq pika python-pika

当我阻止ConnectionResetError长时间运行的IOLoop时,我遇到了channel.start_consuming()的问题。所以我读了这段代码:
https://github.com/pika/pika/blob/0.12.0/examples/basic_consumer_threaded.py
在这段代码中,作业在后台线程中运行。

问题是,当我的工作在线程中运行时,工作程序仍可以执行更多工作(即,继续获取on_message回调)。但是我不希望我的工人一次处理多个工作。
我该怎么办?是否可以通知队列该工人“忙”并且一段时间不能接受工作?

1 个答案:

答案 0 :(得分:1)

只要您通过channel.basic_qos方法设置通道的QoS值,您的使用者将不会收到比prefetch_count指定的消息更多的未确认消息。

如果您使用prefetch_count=1参数,那么您的使用者一次只会收到一条消息,直到为该消息调用basic_ack时,您才会收到更多消息。

如果由于某种原因您看到了不同的内容,请在pika-python邮件列表中的邮件中作为附件或链接共享代码的所有全部,我将对其进行检出。


注意: RabbitMQ团队监视rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。