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

Dav*_*ker 7 java messaging rabbitmq

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

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

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

Erh*_*n A 2

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

我正在使用 4 个索引字段存储 5.000.000 条用户记录,并且所有用户会话都位于使用消息服务的 Rest/Web 服务 API 后面。

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

希望这有助于弄清楚。

ps:一切都取决于数据模型以及您如何实现基础设施。

问候,

编辑:

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

还有一篇关于 MongoDB 和消息传递的好文章

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