Java FIFO队列溢出到磁盘



我正在工作/准备一个基于生产者/消费者模型的应用程序。在我的例子中,将有一个生产者生成几个百万(非琐碎)任务,并且将有一个可配置的消费者数量。

生产者和消费者之间的通信基本上是基于queue的。然而,我担心内存消耗:可以想象,任务的数量将超过JVM的可用内存。因此,我希望有一个Queue实现,它只在内存中保留"top-X"数量的队列项,并将其余部分存储在磁盘上。这并不需要具有弹性,因为它不需要在程序重新启动后存活。

我已经搜索过了,但找不到一个Queue实现似乎被广泛使用(似乎有一些,我称之为,概念验证实现,但我担心这些实现的未来支持/持续开发)。我还研究了外部消息队列应用程序,但是(1)我不想运行第二个外部进程,(2)即使在相同的JVM进程中嵌入消息代理,对于这个需求似乎也有点"头重心轻"。

有人知道有什么支持良好的、面向未来的库提供了这个功能吗?

Rgds

嗯,JMS似乎是一个显而易见的解决方案。我不认为你会找到一些可靠的东西来解决这个问题,因为JMS解决了它,并且是一个标准的解决方案。

但是请注意,Java也有BoundedQueues来解决这个问题:对队列进行维度处理,以确保当队列已满时,它不会与OOME一起失败,并且在尝试将消息放入完整的有界队列时,生产者将被阻塞,直到某个任务被一个消费者从队列中删除。

当有足够多的任务要消耗时,让生产者阻塞通常比让队列增长并消耗更多内存更有效。例如,如果你的队列适合队列,它可以比不适合的队列快几倍。

最新更新