2013-11-18 2 views
1

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

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

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

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

ответ

1

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

+0

Хорошо, я думал, что это должно было работать именно так. Это должно быть проблемой с моей стороны. Я посмотрю. Благодаря! – bmatcuk