我们有一个 Spring 集成应用程序,它在多个节点上的集群中运行。NFS 驱动器安装在所有节点上,并且所有节点都可以读取。
在 NFS 上,有一个文件夹正在被所有节点中的file:inbound-channel-adapter
监视,轮询间隔为 5 秒。
问题是1)一个节点不应该拾取已被另一个节点拾取的文件
2)如果一个节点上的线程拾取文件,则在轮询间隔后运行的第二个线程不应拾取它 - 我已经为这个 AcceptOnceFileListFilter
,但想知道是否有更好的方法。
我们已经看过的选项之一:
1) 在数据库中创建一个具有唯一文件名的记录,并且在开始处理之前每隔一个节点检查同一个数据库
必须查看NIOLocker - 但需要一些关于其可靠性和在这种情况下可能选项的输入。
您是否尝试过在文件被接受后重命名文件? 也就是说,您要做的第一件事是将文件重命名为 file.txt.lck,这意味着其他节点将不再发现它符合其筛选条件。
如果一个节点发生故障,该文件可以由另一个节点手动还原和处理