RabbitMQ 消息生命周期重播消息

RabbitMQ Message Lifetime Replay Message

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

问题是我们希望这些消息在队列中存活 4 个小时。如果新用户登录或说是主管,他们会将过去 4 小时内的所有消息发送到他们的通知窗口。这使他们能够快速查看最近发生的事情和正在发生的事情,而无需询问其他人,"你和约翰谈过了吗?","你给他发电子邮件了吗?",等等。

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

谢谢


在 RabbitMQ 中有 Per-Queue Message TTL 和 Per-Message TTL。如果我是对的,您可以将它们用于您的任务。


排队消息是为了将消息从一个点传递到另一个可靠点。所以发送者可以独立于接收者工作。您建议使用临时持久存储。

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

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


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