2013-10-14 47 views
1

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

问题是我们希望这些消息能够在Queue中生活4个小时。如果新用户登录或说主管,他们会收到最近4小时内发送到其通知窗口的所有消息。这使他们能够快速查看最近发生的事情以及发生了什么,而不必问别人,“你和约翰谈过了什么?”,“你给他发电子邮件是行程吗?”等。

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

感谢

回答

2

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

+0

这不是对自己不够好。每个用户需要一个先验创建的持久队列,以便消息在那里等待用户选择。否则,一旦读取消息,新用户如何登录以查看他以前的消息。 – robthewolf

+0

我看到没有问题让每个用户队列并发布消息给他们。 – pinepain

+0

这取决于有多少用户。但我只是添加它,因为你没有提到它。 – robthewolf

0

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

0

将消息从一个点发送到另一个点是可靠的。所以发送者可以独立于接收者工作。你建议与临时持久性商店合作。

一个sql数据库完全适合,但也是一个mongodb会很好地工作。你用mongo删除一个文档,给它一个ttl并让数据库处理到期。

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