在 java 中寻找崩溃安全队列

Looking for a crash-safe queue in java

我正在构建一个 Java 应用程序,它将 运行 在电池供电、支持蜂窝的设备(顺便说一下,不是移动 phone)上,并且需要向服务器发送命令。 这些命令以 JSON-objects 的形式存在,因此很容易被序列化和反序列化。

由于互联网连接可能不完全可靠,并且设备的电池可能 运行 耗尽,我需要一种将命令保存到磁盘的方法,以防电池 运行 耗尽(在某些情况下,这可能会导致电源在没有警告的情况下关闭)。

命令可以是 'worth' 几欧元一条,所以我采取一切预防措施(当然是在一定范围内)以确保没有命令丢失是很重要的。发送命令两次不是问题,因为每个命令都标有 GUID,而且我的服务器将确保忽略重复项。队列可能包含多达一千个命令,但大多数时候它是空的。

我真正要找的是一个类似队列 (FIFO) 的对象,它有一个支持文件存储,可以在即时崩溃中幸存下来。我需要能够查看下一行,并在处理完成后将其删除。

到目前为止,我一直在使用 MapDB 3.0,但是关于如何创建类队列对象的文档有点令人困惑。而且,对于我想要实现的目标来说,它似乎有点过分

您可以有一个文件目录。每条消息一个文件。文件名可以是时间戳或记录订单的名称。包含 1000 个文件的目录应该仍然可以正常运行。

关闭文件后,它应该会保存到磁盘,但任何操作的安全性取决于设备及其实施方式。