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