Как пропускать сообщения из очереди

arch

#1

Основной сценарий: Мы читаем сообщения из RabbitMQ в цикле с таймаутом в 60 сек. У нас попало в очередь несколько сообщений, одно из которых мы не можем сейчас распарсить. Мы хотим в цикле итеративно считать “хорошие” сообщения из очереди и подтвердить их, а проблемное - не подтверждать, а пропустить, но при этом сохранить его в очереди до следующего цикла обмена.

Сейчас лучшее, что удалось сделать - это вызывать исключение и завершать цикл чтения. Если не вызывать исключение и не подтверждать проблемное сообщение, то код зависнет в методе получения данных из RabbitMQ и следующее сообщение не удастся считать, пока не пройдет таймаут в 60 сек. Есть ли такая комбинация методов работы с компонентой V8RMQClient, которое позволит это сделать?


#2

Можно посмотреть в строну BasicReject, описание как с ним можно работать


#3

есть 3 сценария для сообщений с исключением при обработке:

  • Разобраться потом в этом потоке
  • Выкинуть нафиг и забыть
  • Выкинуть из текущего потока, добавить в поток разбора.

это первый момент

второй момент - это таймаут. Таймаут это время ожидания возникновения сообщения в очереди - то есть аналог sleep. Он к исключениям не относится, хотя и связан.


#4

Присоединяюсь к вопросу ТС.
Пишу консоль по работе с очередью обмена для разбора различных проблемных ситуаций обмена.
Мне нужно принять только сообщение с определенным id (идентификатор находится в теле сообщения, в формате json), а остальные пропустить (они могут потребоваться потом).
Компонента.ОтклонитьСообщение (BasicReject) - имеет параметр ВернутьВОчередь, но если его не устанавливать - сообщения с другим id будут удалены из очереди, а если ставить, то возвращенное сообщение оказывается всегда первым в выборке и добраться до остальных невозможно.


#5

У вас несколько другой кейс.

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