本文主要介绍消息队列 TDMQ RabbitMQ 版中清空 Queue 消息的方法。
注意:
1. 当消息出现非预期的堆积时,建议先排查堆积原因(如消费者宕机、消费者数量不足、超大消息等),再考虑清理消息,否则即使清理了消息,堆积问题可能还会反复出现。
2. 清空 Queue 消息后,Queue 中的所有消息会被永久清理,无法恢复,请谨慎操作。
使用限制
目前仅开源托管版集群支持清理 Queue 消息。
操作步骤
清理 Queue 消息的方式有两种,建议根据具体场景来选择清理消息方法。
方法概述
如果消息堆积数量较大(如达到十万级别),或者堆积的消息大小较大(如超过节点可用内存的50%),建议通过配置 Policy 来逐步减少堆积。
该方法不会导致集群内存负载高,在清理消息的过程中,能够保证集群稳定性。
操作步骤
1. 登录 TDMQ RabbitMQ 版控制台。
2. 在左侧导航栏选择 集群管理 > Vhost,选择好地域后,单击目标 Vhost 的名称,进入基本信息页面。
3. 单击策略 > 新建策略。
4. 填写策略基本设置:

策略名称:按需填写
匹配模式:填写需要清理堆积消息的 Queue 名称
策略类型:自定义策略
应用范围:Queues
优先级:按需填写
5. 填写策略定义,按需选填以下三个参数或其中一个:

Max Length:
作用:Queue 中允许的最大消息数。当队列中的消息数达到此限制时,根据 Overflow Behaviour 设置,将会删除旧消息或拒绝新消息。
数值:根据堆积情况填入数值,如1000,表示 Queue 中最多允许1000条消息。
Max Length Bytes:
作用:队列中允许的最大消息字节总数。当队列中的消息字节总数达到此限制时,根据 Overflow Behaviour 设置,将会删除旧消息或拒绝新消息。
数值:根据堆积情况填入数值,如10485760,表示 Queue 中最多允许10485760 bytes(10MB)的消息字节总数。
Overflow Behaviour:
作用:当队列达到最大长度或最大字节限制时的处理方式。合法值为:
drop-head:删除队列头部的旧消息。
reject-publish:拒绝新发布的消息。
reject-publish-dlx:拒绝新发布的消息,并将被拒绝的消息路由到队列设置的死信交换机(Dead letter exchange)
填值:根据业务情况填入处理方式,如drop-head,表示 Queue 达到最大长度或最大字节限制时,将会删除队列头部的旧消息,以达到降低堆积的目的。
6. 单击完成。然后再观察 Queue 的堆积情况。
7. 如果 Queue 堆积量很大,可以逐步修改策略的数值,来逐渐降低 Queue 中的堆积,再使用方法二完全清空消息,避免集群节点负载高的问题。
方法概述
1. 如果消息堆积数量较小(如千级别),或者堆积的消息总大小较小(如不超过节点可用内存的10%),可以使用开源控制台的 Purge Message 能力进行清理。
2. 如果消息堆积量较大,使用该方法清理消息容易导致集群节点内存负载高,建议可以先使用方法一降低消息堆积量,再使用方法二清空剩余消息。
注意:
该方法会将 Queue 中所有消息永久删除且不可恢复,请谨慎操作。
操作步骤
1. 登录开源 RabbitMQ 控制台。
2. 单击 Queue 页签,找到需要清空消息的 Queue,并单击进入 Queue 详情。

3. 在页面中找到 Purge,单击 Purge Messages,再单击确认。
