RabbitMQ 消息生命周期重播消息

问题描述 投票:0回答:4

我们目前正在评估 RabbitMQ。尝试确定如何最好地将我们的某些流程实现为消息传递应用程序,而不是传统的数据库存储和抓取。这是场景。我们有一个执行类似任务的用户部门。当他们向服务器应用程序提交工作时,我们希望服务器应用程序将消息发送回通知窗口,说明已完成的操作 - 发送给所有用户,而不仅仅是提交工作的用户。这一切都很容易做到。

问题是我们希望这些消息在队列中保留 4 个小时。如果新用户登录或称主管,他们将收到过去 4 小时发送到其通知窗口的所有消息。这让他们可以快速回顾最近发生的事情和正在发生的事情,而不必问其他人,“你和约翰谈过了吗?”,“你给他发了行程单吗?”等等。

那么,我们如何发布自发布后生命周期为 x 小时的消息,并且连接的任何新消费者都将按时间顺序获取所有这些消息?最好消息在队列中过期后就消失。

谢谢

rabbitmq
4个回答
2
投票

RabbitMQ 中有 Per-Queue Message TTLPer-Message TTL。如果我是对的,您可以利用它们来完成您的任务。


0
投票

除了上面的答案之外,最好让应用程序/客户端将消息发布到两个队列。消费者将从其中一个队列中消费,而另一个队列可以使用每个队列消息 TTL 或每个消息 TTL 来配置以保留消息。


0
投票

对消息进行排队,以便将消息从一个点可靠地发送到另一个点。因此发送方可以独立于接收方工作。您建议使用临时持久存储。

sql 数据库非常适合,但 mongodb 也可以很好地工作。您在 mongo 中删除一个文档,给它一个 ttl,然后让数据库处理过期时间。

http://docs.mongodb.org/master/tutorial/expire-data/


0
投票

考虑使用 v3.9.0(2021 年 7 月 23 日)中引入的新 RabbitMQ Streams 功能。使用 RabbitMQ Streams,您可以在给定的保留时间内保存所有消息并重播这些消息。

检查 RabbitMQ Streams 文档

© www.soinside.com 2019 - 2024. All rights reserved.