RabbitMQ - Удалены неупакованные сообщения в очереди, в которой нет потребителей. - PullRequest
0 голосов
/ 25 сентября 2018

У нас есть очередь резервного копирования в RabbitMQ, которая просто хранит копию старых сообщений для потребления человеком.В этой очереди нет потребителей, и единственный способ просмотреть сообщения - это использовать пользовательский интерфейс / API Get Messages.

Проблема заключается в том, что один из пользователей пытался получить более 24 000 сообщений с включенным запросом, иочередь попала в плохое состояние.

В настоящее время я вижу, что есть 24k непрочитанных сообщений, но у меня нет потребителей в очереди.

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

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

Редактировать: У других подобных вопросов по этой теме есть потребители, тогда как у меня нет, поэтомуих решения не относятся ко мне.Поэтому я создаю это как новый вопрос.

Спасибо

RabbitMQ Снимок экрана непрочитанных сообщений

1 Ответ

0 голосов
/ 25 сентября 2018

Могу ли я выполнить какое-либо действие администратора, чтобы очистить содержимое этой очереди?

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

И так как нет потребителей, я не знаю ни о каком соединении, котороеЯ могу закрыть, что бы перевести сообщения обратно в состояние готовности.

Это сложный вопрос.Предполагается, что управляющая команда для получения сообщений немедленно «заберет» сообщение, чтобы вернуть его в очередь (в зависимости от настроек).Это, вероятно, ошибка, но описанный вами вариант использования (просто наличие очереди, в которой накапливаются сообщения без получателя) на самом деле не является допустимым случаем использования, поэтому даже если это ошибка, он может не иметь большого значения длякто-то на работу.

Обратите внимание , что неупакованные сообщения привязаны к определенному каналу , а не к конкретному потребителю (я предполагаю, но не знаю точно, чтоAPI управления работает путем создания канала под капотом).Таким образом, можно также запросить их, закрыв и перезапустив плагин управления, или даже, возможно, посредник (хотя все ставки там отключены).

С этот пост ,следующее должно перезапустить плагин управления: rabbitmqctl eval 'application:stop(rabbitmq_management).' rabbitmqctl eval 'application:start(rabbitmq_management).'

...