2012-08-13 64 views
7

我正在寻找一个简单的持久缓冲区作为Java应用程序中JSON消息的临时存储。内存使用情况应该相对稳定,并且不依赖于缓冲区中的消息数量。能够从过去的某个点重播消息会很好。删除旧邮件应该是有效的。需要能够处理1米消息/小时。在Java中寻找简单的持久消息缓冲区

目前我的应用程序使用本地的RabbitMQ代理其铲消息发送到远程的RabbitMQ经纪人。当远程代理关闭或不接受消息时,本地RabbitMQ代理的内存使用量随着队列长度的增加而增加,并最终停止接受消息。我想交换一下本地基于磁盘的缓冲区和线程将消息复制到远程RabbitMQ代理。

任何人有任何想法?我曾看过卡夫卡,但对我的使用案例来说似乎有些过火。 MongoDB是一种可能性,但我担心它的内存使用情况。

+0

不知道,但也许Redis?它支持pub/sub也... – 2012-08-13 13:59:26

+0

redis正在快速发展,但需要如此多的内存。看一下这个。 http://nosql.mypopescu.com/post/1010844204/redis-memory-usage – 2012-08-13 14:19:21

+0

你可能会考虑像https://github.com/peter-lawrey/Java-Chronicle其目的是支持每秒超过10M的消息,但你必须旋转文件来删除它们。 – 2012-08-13 14:23:12

回答

2

内存使用率始终是任何系统的问题。我使用MongoDB进行生产,当我与类似的解决方案(CouchDB,CouchBase,redis.io)进行比较时,MongoDB在内存管理方面非常出色,并且易于实现。但我应该承认,我从来没有机会更详细地测试Riak。

我存储与4个索引字段和其背后采用的是短信服务后面的REST/Web服务API的所有用户会话5.000.000用户记录。

我的消息服务在同一台服务器上使用另一个数据库实例。 我的用户记录至少有20个字段,会话记录只有5个字段。 我的ubuntu服务器从来没有使用超过10 GB的RAM,即使在重载过程中也是如此。

希望这有助于弄清楚。

PS:都依赖于数据模型,以及如何您实现您的基础设施。

问候,

编辑:

我觉得this是关于使用MongoDB的消息传递一个很好的幻灯片。

和一个不错的article有关的MongoDB和消息。

您可以使用测试代码,看看结果是确定您的解决方案。 请不要忘记分享你的结果,如果你测试。

+1

我最终编写了一个持久消息队列服务器,并带有我们需要的重播内容。 Checkout http // qdb.io / – 2013-07-31 21:02:55