当我阻止 IOLoop 时,channel.start_consuming()
长时间运行时,我遇到了ConnectionResetError
问题。 所以我读了这段代码:
https://github.com/pika/pika/blob/0.12.0/examples/basic_consumer_threaded.py在此代码中,作业在后台线程中运行。
问题是,当我的作业在线程中运行时,工作线程仍然可以承担更多作业(即不断收到on_message回调(。 但我不希望我的工人一次处理多个作业。
我该怎么办? 是否可以通知队列工作人员"忙"并且一段时间内无法接受工作?
只要您通过channel.basic_qos
方法设置通道的 QoS 值,您的消费者就不会收到比 prefetch_count
指定的更多未确认消息。
如果使用 prefetch_count=1
参数,则使用者一次只会收到一条消息,并且在为该消息调用basic_ack
之前不会收到更多消息。
如果出于某种原因,您看到不同的东西,请将您的所有代码作为附件或链接共享在pika-python
邮件列表中的消息中,我会检查一下。
注意:RabbitMQ 团队监控rabbitmq-users
邮件列表,并且只偶尔回答 StackOverflow 上的问题。