【问题标题】:Locking a file across multiple nodes with common FS使用通用 FS 跨多个节点锁定文件
【发布时间】:2012-12-04 07:58:03
【问题描述】:

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

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

问题是 1) 一个节点不应该拾取已经被其他节点拾取的文件

2) 如果文件被一个节点上的线程拾取,则在轮询间隔后运行的第二个线程不应该拾取它-我为此设置了 AcceptOnceFileListFilter ,但想知道是否有更好的方法.

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

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

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

【问题讨论】:

    标签: spring-integration filelock


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,它有一系列问题。在一个节点重命名之间,如果另一个节点可能获得相同的文件集(我知道可能性较小,但存在),然后抛出 FileNotFound。无论如何,在一般意义上,我们得出的结论是,这是一种错误的解决问题的方法。从 EIP 书中,如果两个系统贪婪地寻找相同的资源,那么中介模式是一个更好的解决方案。让中介查找文件并推送到节点进行处理。我个人认为这是一个更好的解决方案
    • 非常正确 - 对冗余和故障进行适当管理的调解器会起作用。这意味着一个节点被指定为“主节点”,其余节点被指定为“从节点”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2016-12-30
    • 2015-11-06
    • 2014-02-28
    • 2011-11-03
    • 2015-02-02
    相关资源
    最近更新 更多