从RabbitMQ

时间:2016-03-15 15:10:05

标签: c# rabbitmq

我有几个排队等待某些信息的队列。让我们说我有“成功”和“失败”的队列,其中服务器端组件不断地为客户端向这些队列写入一些数据。

客户端读取此数据并在UI上显示给最终用户。现在,我有一种情况可以清除这些超过30天的队列中的任何消息。因此,客户在任何时间点只能看到30天的信息。

我已经搜索了很多,并且可以看到一些命令行选项来清除整个队列,但找不到相关的建议。

对正确方向的任何帮助表示赞赏。感谢

1 个答案:

答案 0 :(得分:2)

我不认为这是可能的;看起来你正在尝试使用RabbitMq作为数据存储而不是消息服务器。

了解消息是否“早于”30的唯一方法是处理消息,通过执行此操作,您将从队列中删除消息。 这里最好的办法是处理消息并将其存储在长期存储中;然后,您可以实施删除策略以消除旧元素。

如果您真的想沿着这条路走下去,RabbitMQ会在队列级别或消息级别实现TTL;看看这个:https://www.rabbitmq.com/ttl.html

[如评论中所述]

要将消息保留在队列中,您可以尝试使用NACK而不是ACK作为确认;这样RabbitMQ会认为消息未送达,它将尝试一次又一次地传递它。请记住创建一个持久队列(https://www.rabbitmq.com/confirms.html)。

您还可以查看以下答案:Rabbitmq Ack or Nack, leaving messages on the queue