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

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

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

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

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

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

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

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

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

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

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

Для каждой очереди создаём очередь errors.ИмяИсходнойОчереди и пишем туда данные сообщения, время, текст ошибки, ключ маршрутизации, точку публикации. Потом настраиваем критические оповещения на ненулевую очередь в мониторинг. Потом сделать обработку для переотправки из очереди ошибок в исходную/удаления для разрешения проблемных сообщений.

Когда перенаправляем: ошибка в формате сообщения, отсутсвствующие объекты по ссылкам, _не_разрешаемые проблемы бизнес-логики
Когда оставляем: необработанные исключения, отказ бд, таймаут блокировки, недоступность внешнего сервиса необходимого для обработки сообщения.

В редких случаях создаётся очередь с повышенным ttl для переотправки через заданный интервал.