加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

具有溢出到磁盘的Java FIFO队列

发布时间:2020-12-15 02:30:23 所属栏目:Java 来源:网络整理
导读:我正在/准备一个基于生产者/消费者模型的应用程序.在我的情况下,将有一个生产者生成数百万(非平凡)任务,并且将有可配置数量的消费者. 生产者和消费者之间的沟通基本上是基于队列的.然而我担心内存消耗:可以想象任务数量将超过JVM的可用内存.所以我想要一个Q
我正在/准备一个基于生产者/消费者模型的应用程序.在我的情况下,将有一个生产者生成数百万(非平凡)任务,并且将有可配置数量的消费者.

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

我一直在搜索,但找不到一个似乎广泛使用的队列实现(似乎有一些,我称之为,概念验证实现,但我担心未来的支持/继续开发这些实现).我也看了外部消息队列应用程序,但是(1)我不想运行第二个外部进程和(2)甚至在同一个JVM进程中嵌入消息代理似乎对这个要求有点“头重脚轻” .

有没有人知道任何提供此功能的良好支持的面向未来的库?

RGDS

解决方法

好吧,JMS似乎是一个明显的解决方案.我认为你不会找到解决这个问题的可靠方法,因为JMS解决了这个问题并且是标准的解决方案.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读