Rabbmit MQ 清空所有Queue及其message

简介: 在测试区,经常因为测试导致测试区很多队列里面堆积很多消息。这一方面对测试区MQ的性能造成问题,dashboard这个插件经常卡主。此外消息过多也不方便debug。

在测试区,经常因为测试导致测试区很多队列里面堆积很多消息。这一方面对测试区MQ的性能造成问题,dashboard这个插件经常卡主。此外消息过多也不方便debug。

一、需求

  • 测试环境服务器资源吃紧,MQ 非常容易爆掉。监控界面都进不去的时候,该如何处理?
  • 消息堆积太多,如何快速清理?

二、dashboard purge message

mq的dashbnoard插件提供了puege单个队列的所有消息。如下图

2020092110005565.png

三、批量清除所有的队列以及消息

[root@P1QMSARC01 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@P1QMSARC01 ...
#检查是否关闭
[root@P1QMSARC01 ~]# lsof -i:5672
[root@P1QMSARC01 ~]# 
#清除所有队列以及消息
[root@P1QMSARC01 ~]# rabbitmqctl reset
Resetting node rabbit@P1QMSARC01 ...

清空后的overview 的Queues为0.

20200921100958651.png

#启动
[root@P1QMSARC01 ~]# rabbitmqctl start_app 
Starting node rabbit@P1QMSARC01 ...
 completed with 3 plugins.

四、MQ的 meta data导入与导出

使用rabbitmqctl reset 之前切记一定要将队列的定义信息导出。待清空完成后再导入。

2019111410585449.png

导出的队列是一个json格式的文件。

"rabbit_version": "3.7.10",
  "users": [{
    "name": "guest",
    "password_hash": "AgvI76xv7Z7x8GgygqtqM75S3TkqfcuwmndHpeFRuPaNZkTN",
    "hashing_algorithm": "rabbit_password_hashing_sha256",
    "tags": "administrator"
  }],
  "vhosts": [{
    "name": "/"
  }],
  "permissions": [{
    "user": "guest",
    "vhost": "/",
    "configure": ".*",
    "write": ".*",
    "read": ".*"
  }],
  "topic_permissions": [],
  "parameters": [],
  "global_parameters": [{
    "name": "cluster_name",
    "value": "rabbit@P1QMSARC01"
  }],
  "policies": [{
    "vhost": "/",
    "name": "ha-all",
    "pattern": "^",
    "apply-to": "all",
    "definition": {
      "ha-mode": "all"
    },
    "priority": 0
  }],
  "queues": [{
    "name": "466XPNRP0300",
    "vhost": "/",
    "durable": true,
    "auto_delete": false,
    "arguments": {}
  }, 

将这个json文件从dashboard导入,之前所有的队列都恢复了,但消息再也回不来了。所以正式区还是慎用,除非消息被备份了。

20200921101604159.png

五、如何清空部分MQ 的message?

测试代码如下:

 @Test
    public void testpurgeRabbitMQ() throws IOException {
//        快捷情况MQ 的消息
        String queueName = "A_GLASS,A_PANEL,A_DEFECT,F_GLASS,F_PANEL,F_DEFECT,C_GLASS,C_PANEL,C_DEFECT";
        List<String> queueStrList = Arrays.asList(queueName.split(","));
//        final List<JSONObject> jsonObjectList = buildJsonString();
        try {
            for(int i= 0; i< queueStrList.size(); i++){
                channel.queuePurge(queueStrList.get(i));
                log.info("QueueName:{},had purged",queueStrList.get(i));
            }
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }

2021年6月22日01:01:12

rabbitmqadmin purge queue name=purge-test name=purge-test1

六、如何使用命令行purge 大量堆积的MQ

rabbitmqadmin purge queue name=purge-test

可以跟多个name吗?一次性purge多个

rabbitmqadmin purge queue name=purge-test name=purge-test1

c0ff7f253fb6417b9ca6c6fd75bae6dc.png

一次puege多个好像不可以。2167ddae20d7411b8a967d113ec196d1.png

api purge

这个还没测通,api url中的vhost_name是一个/ 该如何处理?

curl -i -u guest:guest -XDELETE http://10.50.10.179:15672/api/queues//purge-test/contents
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
JSON 物联网 数据格式
什么是MQTT 遗嘱消息(Will Message)
【2月更文挑战第17天】
224 7
什么是MQTT 遗嘱消息(Will Message)
|
12月前
Rabbmit MQ 错误 connection error
Rabbmit MQ 错误 connection error
56 0
|
12月前
Rabbmit MQ connection 解决方法
Rabbmit MQ connection 解决方法
67 0
|
12月前
Rabbmit MQ 消费模式
Rabbmit MQ 消费模式
67 0
|
消息中间件
消息队列 MQ——名称 含义 Message 消息
消息队列 MQ——名称 含义 Message 消息自制脑图
97 0
消息队列 MQ——名称 含义 Message 消息
|
消息中间件 网络协议 网络性能优化
我的mqtt协议和emqttd开源项目个人理解(1) - Clean Session和Retained Message
我的mqtt协议和emqttd开源项目个人理解(1) - Clean Session和Retained Message
377 0
我的mqtt协议和emqttd开源项目个人理解(1) - Clean Session和Retained Message
|
消息中间件 安全 Java
RocketMQ into the 500,000-TPS Message Club
The messaging team, devoted to RocketMQ performance optimization, has seen continuous optimization on performance in the recent times with the latest
3005 0
|
7天前
|
消息中间件 测试技术 RocketMQ
消息队列 MQ产品使用合集之在异步发送消息函数sendMessage()中出现了错误,错误代码为-3,该如何解决
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
7天前
|
消息中间件 监控 Oracle
消息队列 MQ产品使用合集之启动Namesrv节点时,遇到报错,该如何解决
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
7天前
|
消息中间件 Java RocketMQ
消息队列 MQ产品使用合集之当SpringBoot应用因网络不通而启动失败时,该如何解决
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。