我有一个多进程和多线程系统,它与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
...
注意:每个线程都有自己的连接。
答案 0 :(得分:0)
RabbitMQ团队监控this mailing list,有时只回答StackOverflow上的问题。
在创建其他流程或线程之前,您是否创建了Pika客户端?如the docs中所述,Pika客户端既不是线程安全的,也不是多进程安全的。
如果没有提供工作示例,我无法进一步诊断这种特殊行为。