RabbitMQ: потребление только одного сообщения за раз из нескольких очередей

Я пытаюсь оставаться на связи с несколькими очередями в RabbitMQ. Каждый раз, когда я выталкиваю новое сообщение из одной из этих очередей, я хотел бы создать внешний процесс.

Этот процесс займет некоторое время, чтобы обработать сообщение, и я не хочу начинать обработку другого сообщения из этой конкретной очереди, пока не будет завершено то, которое я извлек ранее. Если возможно, я бы не хотел поддерживать процесс/поток только для того, чтобы дождаться завершения внешнего процесса и подтверждения сервера. В идеале я хотел бы подтвердить этот внешний процесс, возможно, передав некоторый идентификатор, чтобы он мог подключиться к RabbitMQ и подтвердить сообщение.

Можно ли спроектировать эту систему с помощью RabbitMQ? Я использую Python и Pika, если это имеет отношение к ответу.

Спасибо!


person Andrés Fernández    schedule 08.08.2016    source источник


Ответы (1)


RabbitMQ может это сделать.

Вы хотите читать из очереди только тогда, когда будете готовы, поэтому запустите поток, который может породить внешний процесс и наблюдать за ним, а затем получить следующее сообщение из очереди, когда процесс будет завершен. Затем вы можете запустить несколько потоков параллельно для управления несколькими очередями.

Я не уверен, для чего вам нужен акк? Вы пытаетесь помешать RabbitMQ добавлять новые элементы в эту очередь, если она слишком заполнена (потому что ее элементы обрабатываются слишком медленно/не совсем)? Может быть способ сделать это, когда вы добавляете сообщения в очереди - перед добавлением элемента убедитесь, что количество сообщений, уже находящихся в этой очереди, не "намного больше, чем" среднее значение по всем очередям?

person Frangipanes    schedule 08.08.2016
comment
Я пытался сделать это, не запуская внешний процесс, но вы правы, я должен просто выскочить из очереди, когда буду готов, не слишком усложняя это. - person Andrés Fernández; 10.08.2016