RabbitMQ Round Robin с подтверждением

Допустим, у меня есть очередь с кучей сообщений. У меня есть 2 потребителя, подключенные к этой очереди, оба с предварительной выборкой = 1. Работа, которую выполняют эти потребители, занимает некоторое время, и я не хочу подтверждать сообщение до тех пор, пока работа не будет выполнена (в случае сбоя потребителя или чего-то еще - Я хочу, чтобы сообщение автоматически повторно ставилось в очередь в исключительных случаях).

Но я также хочу, чтобы эти потребители работали параллельно, а этого, похоже, не происходит. Другими словами, пока в очереди есть 2+ сообщения, я ожидаю, что оба потребителя будут заняты.

Вместо этого, похоже, происходит то, что потребитель 1 получает сообщение, но потребитель 2 будет ждать, пока потребитель 1 не подтвердит получение сообщения. Затем потребитель 2 получает сообщение, а потребитель 1 ждет и т. д.

Есть ли вариант, который я упускаю? Или это должно работать, у меня просто где-то ошибка в коде? Или это невозможно?


person bmatcuk    schedule 18.11.2013    source источник


Ответы (1)


Вы должны иметь возможность извлекать сообщения из очереди, в то время как предыдущие сообщения все еще обрабатываются другими потребителями. Учебное пособие по RabbitMQ особо указывает на параллелизм как на сильную сторону циклической диспетчеризации (http://www.rabbitmq.com/tutorials/tutorial-two-python.html). Два ваших потребителя работают как потоки в одном и том же процессе? Интересно, если вы только что сделали ошибку в реализации.

person dano    schedule 18.11.2013
comment
Хорошо, я думал, что это должно работать таким образом. Должно быть проблема с моей стороны. Я посмотрю на это. Спасибо! - person bmatcuk; 19.11.2013