有条件地从 RabbitMQ 中删除消息
Conditional deletion of messages from RabbitMQ
我有几个队列,某些信息在其中排队。假设我有 "success" 和 "failed" 队列,其中服务器端组件不断地将一些数据写入这些队列以供客户端使用。
客户端读取此数据并将其显示在 UI 上以供最终用户使用。现在,我可以清除这些队列中超过 30 天的任何消息。这样,客户在任何时间点都只能看到 30 天的信息。
我搜索了很多,可以看到一些命令行选项来清除整个队列,但找不到相关建议。
感谢您提供正确方向的帮助。谢谢
我认为这是不可能的;看起来您正在尝试使用 RabbitMq 作为数据存储而不是消息服务器。
了解消息是否 "older" 大于 30 的唯一方法是处理消息,这样做就是从队列中删除消息。
这里最好的办法是处理消息并将它们存储在长期存储中;那么你可以实施删除策略来消除旧元素。
如果你真的想走这条路,RabbitMQ在队列级别或消息级别实现TTL;看看这个:https://www.rabbitmq.com/ttl.html
[如评论所述]
要将消息保留在队列中,您可以尝试使用 NACK 而不是 ACK 作为确认;这样,RabbitMQ 将认为消息未送达,并会尝试一次又一次地送达。记得创建一个持久队列(https://www.rabbitmq.com/confirms.html)。
您也可以查看这个答案:
我有几个队列,某些信息在其中排队。假设我有 "success" 和 "failed" 队列,其中服务器端组件不断地将一些数据写入这些队列以供客户端使用。
客户端读取此数据并将其显示在 UI 上以供最终用户使用。现在,我可以清除这些队列中超过 30 天的任何消息。这样,客户在任何时间点都只能看到 30 天的信息。
我搜索了很多,可以看到一些命令行选项来清除整个队列,但找不到相关建议。
感谢您提供正确方向的帮助。谢谢
我认为这是不可能的;看起来您正在尝试使用 RabbitMq 作为数据存储而不是消息服务器。
了解消息是否 "older" 大于 30 的唯一方法是处理消息,这样做就是从队列中删除消息。 这里最好的办法是处理消息并将它们存储在长期存储中;那么你可以实施删除策略来消除旧元素。
如果你真的想走这条路,RabbitMQ在队列级别或消息级别实现TTL;看看这个:https://www.rabbitmq.com/ttl.html
[如评论所述]
要将消息保留在队列中,您可以尝试使用 NACK 而不是 ACK 作为确认;这样,RabbitMQ 将认为消息未送达,并会尝试一次又一次地送达。记得创建一个持久队列(https://www.rabbitmq.com/confirms.html)。
您也可以查看这个答案: