项目中使用到了RabbitMQ,使用了大量的一次性队列,然而没有设置自动过期、自动删除等特性。长期运行导致了大量的队列产生,非常影响性能及问题排查效率。这里收集了一些可以批量删除队列的方法,供参考。
方法一:设置过期策略
优点:操作简单,可针对有规律的队列进行策略设置
缺点:想不到有什么缺点
# 设置规则
rabbitmqctl set_policy delete_gen "amq.gen-.*" '{"expires":1}' --apply-to queues
# 取消规则
rabbitmqctl clear_policy delete_gen
# 如果要作用于所有队列
rabbitmqctl set_policy delete_all ".*" '{"expires":1}' --apply-to queues
方法二:重置数据库
优点:简单,删除全部队列
缺点:粗暴
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
方法三:删除vhost
优点:删除一个vhost的所有队列,包括Exchange
缺点:仅适用需要删除一个vhost的场景
curl -i -XDELETE http://USERNAME:[email protected]:15672/api/vhosts/VHOST_NAME
# 例子
curl -i -XDELETE http://admin:[email protected]:15672/api/vhosts/%2F
方法四:通过HTTP API删除
优点:HTTP API灵活
缺点:一次删一个
curl -i -XDELETE http://USERNAME:PASSWORD@HOST:PORT/api/queues/VHOST/QUEUE_NAME
# 例子:
curl -i -XDELETE http://admin:[email protected]:15672/api/queues/%2F/test_queue
方法五:使用rabbitmqadmin工具
优点:使用方便
缺点:底层也是使用HTTP API实现的
rabbitmqadmin --host=HOST --port=15672 --ssl --vhost=VHOST --username=USERNAME --password=PASSWORD delete queue name=QUEUE_NAME