使用公共FS在多个节点上锁定文件

时间:2012-12-04 07:58:03

标签: spring-integration filelock

我们有一个Spring集成应用程序,它运行在多个节点上的集群中。 NFS驱动器跨所有节点安装,并且可供所有节点读取。

在NFS上有一个文件夹,所有节点的file:inbound-channel-adapter都在监视该文件夹,轮询间隔为5秒。

问题是 1)一个节点不应该拾取已由其他节点

拾取的文件

2)如果一个节点上的某个线程拾取了一个文件,那么在轮询间隔后运行的第二个线程不应该拾取它 - 我已经为这个节点 AcceptOnceFileListFilter 了,但是想知道是否有一个更好的方式。

我们已经看过的一个选项:

1)在具有唯一文件名的DB中创建记录,并且每个其他节点在开始处理之前检查相同的DB

还要看看NIOLocker - 但是在这种情况下需要一些关于它的可靠性和可能选项的输入。

1 个答案:

答案 0 :(得分:0)

您是否尝试在文件被接受后重命名?也就是说,您要做的第一件事就是将文件重命名为file.txt.lck,这意味着其他节点将不再符合其筛选条件。

如果节点发生故障,该文件可以手动恢复并由另一个节点处理