这可能是不可能的,但我想我可以试一试。我有一些处理一些数据的工作,它对处理的每个数据做出 3 个决定:保留、丢弃或修改/重新处理(因为它不确定保留/丢弃)。这会生成大量数据,因为重新处理可能会将数据分解为许多不同的部分。
我最初的方法是将其发送到正在处理数据的执行服务,但由于要处理的项目数量很大,我很快就会耗尽内存。然后我决定可能将队列卸载到消息传递服务器(rabbitmq),它工作正常,但现在我受网络 IO 的约束。我喜欢 rabbitmq 的地方在于它将内存中的消息保持到一定水平,然后将旧消息转储到本地驱动器,因此如果我的服务器上有 8 gig 的内存,我仍然可以拥有 100 gig 的消息队列。
所以我的问题是,在 Java 中是否有任何具有类似功能的库?我可以用作非阻塞队列的东西,它只在队列中保留 X 个项目(按项目数或大小)并将其余的写入本地驱动器。
注意:现在我只要求在一台服务器上使用它。将来我可能会添加更多服务器,但因为每台服务器都是自生成数据,所以如果一台服务器的队列为空,我会尝试从一个队列中获取消息并将它们推送到另一个队列。该库不需要网络访问,但我需要从另一个 Java 进程访问队列。我知道这是一个很长的镜头,但我想如果有人知道它会是这样。