Подтвердить что ты не робот

RabbitMQ - очистить очередь от всех непрочитанных сообщений

В моей среде разработчиков есть тысячи непрочитанных сообщений, которые я не могу перезапустить.
Есть ли способ удалить (очистить) все сообщения, даже если они не подтверждены?

4b9b3361

Ответ 1

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

Ответ 2

Вы должны сделать потребитель ack им (или nack), и только после этого они будут удалены. В качестве альтернативы вы можете отключить потребителей и полностью очистить очередь.

Если вы ищете какой-то способ очистить все незакрепленные сообщения - такой функции нет и в протоколе AMQP ни в RabbitMQ.

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

Ответ 3

Когда в очереди нет "готовых" сообщений, удалите их и заново создайте.

Ответ 4

Вам нужно позвонить basic.recover, чтобы все незакрепленные сообщения были повторно выставлены на неудавшийся канал. Помните об ошибках, связанных с этой функцией, указав, что RabbitMQ поддерживает только режим requeue.

Ответ 5

Прежде чем вы сможете очистить их, вам необходимо поместить сообщения в очередь:

Как альтернатива, это не требует ожидания:

  • удалить и воссоздать очередь
  • перезагрузите сервер

Ответ 6

Для разработчиков программного обеспечения используйте приведенный ниже код.

channel.purgeQueue (очереди имя);

если мы используем этот код, очередь будет очищена и такая же очередь будет существовать.

Ответ 7

Если вы хотите очистить содержимое очереди, вы можете использовать метод AMQP queue.purge: в AMQP есть очистка очереди: http://www.rabbitmq.com/amqp-0-9-1-reference.html#queue.purge

Вы можете сделать подобное с помощью плагина управления.