在Java中寻找简单的持久性消息缓冲区

时间:2012-08-13 13:53:44

标签: java messaging rabbitmq

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

目前,我的应用程序使用本地RabbitMQ代理,该代理将消息传递给远程RabbitMQ代理。当远程代理关闭或不接受消息时,本地RabbitMQ代理的内存使用量随队列长度而增加,并最终停止接受消息。我想将此交换为基于本地磁盘的缓冲区和将消息复制到远程RabbitMQ代理的线程。

有人有什么想法吗?我看过Kafka,但对我的用例来说似乎有点过分了。 MongoDB是可能的,但我担心它的内存使用情况。

1 个答案:

答案 0 :(得分:2)

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

我正在存储具有4个索引字段的5.000.000个用户记录,以及使用后面的消息服务的休息/ Web服务api后面的所有用户会话。

我的消息传递服务在同一服务器上使用另一个数据库实例。 我的用户记录至少有20个字段,会话记录只有5个字段。 即使负载过重,我的ubuntu服务器也从未使用超过10 GB的RAM。

希望这有助于弄清楚。

ps:所有这些都取决于数据模型以及您如何实施基础架构。

此致

修改

我认为this是一个关于使用MongoDB进行消息传递的好幻灯片。

和一个关于MongoDB和消息传递的好article

您可以使用测试代码,看看您的解决方案的结果是否正常。 如果您进行测试,请不要忘记分享您的结果。