我正在/准备一个基于生产者/消费者模型的应用程序。在我的情况下,将有一个生产者生成几个百万(非平凡)任务,并且将有可配置数量的消费者。
生产者和消费者之间的沟通基本上是基于队列的。然而我担心内存消耗:可以想象任务数量将超过JVM的可用内存。所以我想要一个Queue实现只保留内存中“top-X”数量的队列项,并将其余的存储在磁盘上。这不必具有弹性,因为它不需要在重新启动程序后继续存在。
我一直在搜索,但找不到似乎广泛使用的Queue实现(似乎有一些,我称之为概念验证实现,但我很担心未来支持/继续发展这些实施)。我也看了外部消息队列应用程序,但是(1)我不想运行第二个外部进程和(2)甚至在同一个JVM进程中嵌入消息代理似乎对这个要求有点“头重脚轻”
是否有人知道任何提供此功能的支持未来的未来库?
RGDS
答案 0 :(得分:1)
嗯,JMS似乎是一个明显的解决方案。我认为你不会找到解决这个问题的可靠方法,因为JMS解决了这个问题并且是标准的解决方案。
但是请注意,Java也有BoundedQueues来解决这个问题:对队列进行维度以确保在队列已满时它不会因OOME而失败,并且生成器在尝试将消息放入完整有界时将被阻止队列,直到其中一个消费者从队列中删除某个任务。
答案 1 :(得分:0)
当有足够多的任务被消耗时,生成器块通常比让队列增长和消耗更多内存更有效。例如如果你的队列适合队列,它可以比没有队列的队列快几倍。