Как обращаться с потребителями Pika в многопроцессорной системе

У меня есть многопроцессорная и многопоточная система, которая работает с 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
        ...

Примечание. у каждого потока есть собственное соединение.


person mortymacs    schedule 06.11.2017    source источник
comment
RabbitMQ никогда не будет обслуживать одни и те же данные дважды, если только вы не воспользуетесь сообщением, не отклоните его и не поставите в очередь повторно. Это либо ошибка в pika, либо ваше приложение. Было бы трудно устранить неполадки без более подробной информации о вашей реализации.   -  person eandersson    schedule 07.11.2017


Ответы (1)


Команда RabbitMQ следит за этим списком рассылки и лишь иногда отвечает на вопросы в StackOverflow. .

Вы создаете свой клиент Pika перед созданием дополнительных процессов или потоков? Клиент Pika не является ни потокобезопасным, ни многопроцессорным, как указано в документации. .

Без предоставления рабочего примера я не могу диагностировать это конкретное поведение дальше.

person Luke Bakken    schedule 07.11.2017