我有一个2节点的集群和一个共享文件系统。每个节点都有一个周期性运行的java进程。这个进程访问文件系统并处理一些文件,然后在处理之后删除这些文件。
这里的问题是,只有一个调度进程应该访问这些文件。如果第一个进程运行,另一个进程应该跳过执行。
我第一次尝试解决这个问题是创建一个隐藏文件 .lock
. 当第一个进程开始执行时,它应该将文件移到另一个文件夹并开始处理文件。当另一个调度进程开始执行时,它首先检查 .lock
文件存在,如果不是,进程将跳过执行。当第一个进程完成执行时,它移动 .lock
文件返回到其原始文件夹。我使用files.move()方法 ATOMIC_MOVE
但经过一段时间后,我得到了意想不到的行为。
我的第二次尝试是使用分布式锁,比如 Hazelcast
. 我做了一些测试,看起来还可以,但是这个解决方案对于这么简单的任务来说似乎有点复杂。
我的问题是:有没有其他更聪明/更简单的解决方案,或者我唯一的选择是使用 Hazelcast
? 你将如何解决这个问题?
暂无答案!
目前还没有任何答案,快来回答吧!