【问题标题】:rabbitmq pika don't take more than one job when using a threadrabbitmq pika 使用线程时不会做超过一项工作
【发布时间】:2019-02-06 14:50:48
【问题描述】:

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

问题是,当我的作业在线程中运行时,worker 仍然可以执行更多作业(即,不断收到 on_message 回调)。但我不希望我的员工一次处理一份以上的工作。
我该怎么办?是否可以通知队列worker“忙”并且有一段时间不能接受工作?

【问题讨论】:

    标签: rabbitmq pika python-pika


    【解决方案1】:

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

    如果您使用prefetch_count=1 参数,您的消费者一次只会收到一条消息,并且在为该消息调用basic_ack 之前不会获得更多消息。

    如果由于某种原因,您看到了不同的内容,请将您的代码全部作为附件或链接分享到pika-python 邮件列表中的邮件中,我会检查出来的。 p>


    注意:RabbitMQ 团队会监控 rabbitmq-users mailing list,并且有时只回答 StackOverflow 上的问题。

    【讨论】:

    • 我的工作时间很长,所以我经常断线。我读过我不应该禁用心跳。因此,如果我理解正确,我应该设置 prefetch_count=1,在一个线程中执行我的长时间工作,然后确认消息?因为现在我在消息到达时立即确认,因为我不确定是否可以长时间不确认消息
    • 您链接到的示例代码确切地显示了您应该做什么。你读过代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2021-04-21
    • 2014-05-21
    相关资源
    最近更新 更多