当我阻止ConnectionResetError
长时间运行的IOLoop时,我遇到了channel.start_consuming()
的问题。所以我读了这段代码:
https://github.com/pika/pika/blob/0.12.0/examples/basic_consumer_threaded.py
在这段代码中,作业在后台线程中运行。
问题是,当我的工作在线程中运行时,工作程序仍可以执行更多工作(即,继续获取on_message回调)。但是我不希望我的工人一次处理多个工作。
我该怎么办?是否可以通知队列该工人“忙”并且一段时间不能接受工作?
答案 0 :(得分:1)
只要您通过channel.basic_qos
方法设置通道的QoS值,您的使用者将不会收到比prefetch_count
指定的消息更多的未确认消息。
如果您使用prefetch_count=1
参数,那么您的使用者一次只会收到一条消息,直到为该消息调用basic_ack
时,您才会收到更多消息。
如果由于某种原因您看到了不同的内容,请在pika-python
邮件列表中的邮件中作为附件或链接共享代码的所有全部,我将对其进行检出。
注意: RabbitMQ团队监视rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。