【发布时间】:2016-07-01 02:48:41
【问题描述】:
我有几个队列,其中包含某些信息。假设我有“成功”和“失败”队列,其中服务器端组件不断将一些数据写入这些队列以供客户端使用。
客户端读取此数据并将其显示在最终用户的 UI 上。现在,我需要清除这些队列中超过 30 天的任何消息。这样,客户在任何时间点都只能看到 30 天的信息。
我进行了很多搜索,可以看到一些命令行选项来清除整个队列,但找不到相关建议。
对正确方向的任何帮助表示赞赏。谢谢
【问题讨论】:
我有几个队列,其中包含某些信息。假设我有“成功”和“失败”队列,其中服务器端组件不断将一些数据写入这些队列以供客户端使用。
客户端读取此数据并将其显示在最终用户的 UI 上。现在,我需要清除这些队列中超过 30 天的任何消息。这样,客户在任何时间点都只能看到 30 天的信息。
我进行了很多搜索,可以看到一些命令行选项来清除整个队列,但找不到相关建议。
对正确方向的任何帮助表示赞赏。谢谢
【问题讨论】:
我认为这是不可能的;看起来您正在尝试使用 RabbitMq 作为数据存储而不是消息服务器。
了解消息是否“早于” 30 的唯一方法是处理该消息,通过这样做,您将从队列中删除该消息。 最好的办法是处理消息并将它们存储在长期存储中;那么您可以实施删除策略来消除旧元素。
如果你真的想走这条路,RabbitMQ 在队列级别或消息级别实现 TTL;看看这个:https://www.rabbitmq.com/ttl.html
[如 cmets 中所述]
要将消息保留在队列中,您可以尝试使用 NACK 而不是 ACK 作为确认;这样,RabbitMQ 将认为消息未传递,它会一次又一次地尝试传递它。记得创建一个持久队列 (https://www.rabbitmq.com/confirms.html)。
您也可以查看这个答案:Rabbitmq Ack or Nack, leaving messages on the queue
【讨论】: