Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中寻找简单的持久消息缓冲区_Java_Messaging_Rabbitmq - Fatal编程技术网

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

在Java中寻找简单的持久消息缓冲区,java,messaging,rabbitmq,Java,Messaging,Rabbitmq,我正在寻找一个简单的持久缓冲区,作为Java应用程序中JSON消息的临时存储。内存使用应该相对稳定,不依赖于缓冲区中的消息数。如果能够重播来自过去某个时间点的消息,那就太好了。删除旧邮件应该是有效的。需要能够处理1m条消息/小时 目前,我的应用程序使用本地RabbitMQ代理,它将消息推送到远程RabbitMQ代理。当远程代理关闭或不接受消息时,本地RabbitMQ代理的内存使用率会随着队列长度的增加而增加,并最终停止接受消息。我想把它换成一个基于本地磁盘的缓冲区和一个将消息复制到远程Rabbi

我正在寻找一个简单的持久缓冲区,作为Java应用程序中JSON消息的临时存储。内存使用应该相对稳定,不依赖于缓冲区中的消息数。如果能够重播来自过去某个时间点的消息,那就太好了。删除旧邮件应该是有效的。需要能够处理1m条消息/小时

目前,我的应用程序使用本地RabbitMQ代理,它将消息推送到远程RabbitMQ代理。当远程代理关闭或不接受消息时,本地RabbitMQ代理的内存使用率会随着队列长度的增加而增加,并最终停止接受消息。我想把它换成一个基于本地磁盘的缓冲区和一个将消息复制到远程RabbitMQ代理的线程


有人有什么想法吗?我已经看过卡夫卡了,但对于我的用例来说,这似乎是矫枉过正。MongoDB是一种可能性,但我担心它的内存使用。

内存使用在任何系统中都是一个问题。我使用MongoDB进行生产,当我与类似的解决方案(CouchDB、CouchBase、redis.io)相比时,MongoDB在内存管理和易于实现方面都非常好。但我得承认,我从来没有机会对里亚克进行更详细的测试

我正在使用rest/web服务api存储5.000.000条用户记录,其中包含4个索引字段和所有用户会话,该api使用了后台消息传递服务

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

希望这有助于解决这个问题

ps:所有这些都取决于数据模型和您如何实现您的基础架构

问候,

编辑:

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

对MongoDB和消息传递也有很好的了解

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

不确定,但可能是Redis?它还支持pub/sub…redis速度非常快,但需要大量内存。看看这个。你可能会考虑一些类似于它支持每秒超过10M的消息,但是你必须旋转文件来删除它们。应用程序已经使用ReISIS做其他事情,但是它使用了太多的内存来存储Java Java编年史,看起来它可能会做这件事。我会去看看的!ThanksI最终编写了一个持久消息队列服务器,其中包含了我们需要的重播内容。签出http//qdb.io/