【问题标题】:How to handle Pika consumers on multi processing system如何在多处理系统上处理 Pika 消费者
【发布时间】:2017-11-06 11:32:07
【问题描述】:

我有一个多进程和多线程系统,它与 Pika 一起使用以消耗一些队列。 当系统在具有多线程消费者的单进程上工作时,它可以正常工作,但是当它与多进程(衍生进程)一起工作时,有时一些消费者会从队列中获取重复数据。

当消费者从队列中获取数据时,其他消费者不再从该队列中获取数据,如何处理?

问题的示例地图:

Single-Process, Multi-Thread:
    Sample queue data: 1-2-3-4-5
        consumed by thread-1: 5
        consumed by thread-2: 4
        ...

Multi-Process, Multi-Thread:
    Sample queue data: 1-2-3-4-5
        consumed by process-1, thread-1: 5   << ISSUE
        consumed by process-2, thread-1: 4
        consumed by process-3, thread-3: 5   << ISSUE
        ...

注意:每个线程都有自己的连接。

【问题讨论】:

  • RabbitMQ 永远不会两次提供相同的数据,除非您使用该消息并拒绝它并重新排队。这是 pika 或您的应用程序中的错误。如果没有有关您的实施的更多详细信息,将很难进行故障排除。

标签: python concurrency rabbitmq pika


【解决方案1】:

RabbitMQ 团队会监控 this mailing list,并且有时只会在 StackOverflow 上回答问题。

您是否在创建其他进程或线程之前创建您的 Pika 客户端?如the docs 所述,Pika 客户端既不是线程安全的,也不是多进程安全的。

如果不提供工作示例,我无法进一步诊断此特定行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2010-10-29
    相关资源
    最近更新 更多