Spring integration 使用公共FS跨多个节点锁定文件

Spring integration 使用公共FS跨多个节点锁定文件,spring-integration,filelock,Spring Integration,Filelock,我们有一个spring集成应用程序,它在多个节点的集群中运行。NFS驱动器安装在所有节点上,可供所有节点读取 在NFS上,所有节点的file:inbound channel adapter都监视一个文件夹,轮询间隔为5秒 问题是 1) 一个节点不应拾取已由另一个节点拾取的文件 2) 如果一个节点上的某个线程拾取了一个文件,那么在轮询间隔之后运行的第二个线程不应该拾取它-我已经为这个节点准备了AcceptOnceFileListFilter,但不知道是否有更好的方法 我们已经研究过的选项之一: 1

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

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

问题是 1) 一个节点不应拾取已由另一个节点拾取的文件

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

我们已经研究过的选项之一:

1) 在数据库中创建具有唯一文件名的记录,并且在开始处理之前,每隔一个节点都会检查同一个数据库


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

一旦文件被接受,您是否尝试过重命名它?也就是说,您要做的第一件事是将该文件重命名为file.txt.lck,这意味着其他节点将不再发现它与它们的筛选条件匹配


如果一个节点出现故障,该文件可以由另一个节点手动恢复和处理

嗯,它有一系列问题。在一个节点重命名之间,如果另一个节点可能获得相同的文件集(我知道可能性较小,但存在),然后抛出FileNotFound。总之,在一般意义上,我们认为这是解决问题的错误方法。从EIP的书中可以看出,若两个系统贪婪地寻找相同的资源,那个么中介模式是更好的解决方案。使用中介查找文件并推送到节点进行处理。我个人认为这是一个更好的解决方案,非常正确——调解人对冗余和失败进行了适当的管理,这会起作用。这意味着一个节点被指定为“主节点”,其余节点被指定为“从节点”