В моей среде разработчиков есть тысячи непрочитанных сообщений, которые я не могу перезапустить.
Есть ли способ удалить (очистить) все сообщения, даже если они не подтверждены?
RabbitMQ - очистить очередь от всех непрочитанных сообщений
Ответ 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
Вы можете сделать подобное с помощью плагина управления.