Как очистить одну из очередей RabbitMQ?
Как можно очистить очередь через админку? Можно ли очистить очередь RabbitMQ через консоль?
|
|
|
|
Очередь rabbitmq можно очистить через админку. По умолчанию адмнка rabbitMQ ставится на порту 15672. Подбробнее об установке админки rabbitMQ. 1. Авторизоваться в админке
2. Перейти на вкладку Queues и выбрать очередь, которую нужно очистить (удалить). http://127.0.0.1:15672/#/queues Очередь выбирается кликом. Если очередей в списке много, воспользуйтесь полем Filter для фильтрации по имени.
3. В настройках очереди выберите меню Delete / purge (1). Затем нажмите на кнопку Delete (2). Всплывёт окно подверждения. Для очистки очереди отвечаем утвердительно.
|
|||
|
|
PHP-код для очистки очереди rabbitMQ.
В цикле, пока очередь не пуста, получаем из очереди сообщения. Для получения очередного сообщения имеется метод php код примерно такой: do { $task = $router->consume(); if ($task) { $task->ack(); } } while ($task); При необходимости делаем проверки имени задачи, параметров и т.д.
|
|||
|
|
Удалить все сообщения из определенной очереди rabbitMQ можно с помощью консоли cli. Посмотреть все доступные очереди в списке очередей, точное имя как в rabbitMQ:
В выводе будут имена тасков и их количество в очереди, например: $ sudo rabbitmqctl list_queues name messages_ready Listing queues ... Task_Name_normal 0 Task_Name2_normal 16 TaskQueue_OtherTestTask_high 0 TaskQueue_OtherTestTask_normal 0
Теперь одной из двух команд (
Альтернативой для очистки очереди является "reset". Делать reset не рекомендуется, т.к. при этом сбрасываются абсолютно все настройки на дефолтные, включая созданных пользователей и правки в конфигах: rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app Если в rabbitMQ много задач с похожими именами, то можно написать bash-команду, чтобы удалить их: sudo rabbitmqctl list_queues | awk '{print $1}' | grep Task_Name_ | xargs -I queue_name sudo rabbitmqadmin delete queue name=queue_name
|
|||
|