首页 > 解决方案 > 清除 ActiveMQ Artemis 中的所有消息

问题描述

我们设置了几个 ActiveMQ Artemis 2.17.0 集群,以通过镜像在数据中心之间进行复制。

我们之前的故障转移是紧急情况,状态很可能不同步。当我们接下来执行预定的故障转移测试时,几周前的消息被发送给了消费者。我知道镜像是异步的,所以预计同步可能不会一直是 100%。但是,这些消息不在同步延迟的时间范围内。值得注意的是,我们已经发生了一些我预计可能会引发镜像的事件。我们遇到了NFS 脑裂问题以及过去的紧急故障转移

因此,在我们知道镜像存在问题后,我们正在寻找一种方法来清除(或同步)备用服务器上的所有消息,以防止发生类似情况。有超过 5,000 个队列,因此最好不需要逐个队列地运行该操作。

有没有办法在 ActiveMQ Artemis 2.17.0 或更高版本中实现这一点?

标签: activemq-artemis

解决方案


没有编程方式可以简单地从代理上的每个队列中删除所有数据。但是,您可以组合一些管理操作(例如在脚本中)以获得相同的结果。您可以使用该getQueueNames方法获取每个队列的名称,然后将这些名称传递给该destroyQueue(String)方法。

但是,清除所有数据的最简单方法可能是简单地停止代理,清除数据目录,然后重新启动代理。


推荐阅读