【发布时间】: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