项目中使用到了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:PASSWORD@127.0.0.1:15672/api/vhosts/VHOST_NAME
# 例子
curl -i -XDELETE http://admin:123456@127.0.0.1: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:123456@127.0.0.1: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

标签: none

添加新评论