首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨集群同步文件处理

跨集群同步文件处理
EN

Stack Overflow用户
提问于 2019-04-17 10:12:33
回答 1查看 162关注 0票数 0

我运行一个集群,其中包含同一个微服务的两个或多个实例。它们每个都访问共享数据共享上的文件,共享数据共享在两个运行微服务的服务器上作为本地文件夹挂载。每个文件只能处理一次(在整个集群中)。我希望通过节点以并行方式处理这些文件,因此在整个集群中不会有超过一次的文件。

寻找解决问题的方法

我已经考虑过一个节点读取文件并将它们的文件名放入队列中,这样节点就可以从队列中读取它。

还考虑通过数据库进行同步,其中每个节点在试图处理文件时都使用db与其他节点进行同步。

知道怎么用好的方式解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 19:06:43

像这样的东西可能会起作用:

代码语言:javascript
复制
String pathToFile = "/tmp/foo.txt";
try {
    Files.createFile(FileSystems.getDefault().getPath(pathToFile + ".claimed"));
    processFile(pathToFile);
} catch (FileAlreadyExistsException e) {
    // some other app has already claimed "filename"
}

你需要这些进口品:

代码语言:javascript
复制
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.FileSystems;
import java.nio.file.Files;

其思想是,每个应用程序实例只有首先能够在同一个共享文件系统中创建一个".claimed"文件时,才同意对任何给定的文件进行处理。这是因为Files.createFile的行为造成的。

创建一个新的空文件,如果该文件已经存在,则失败。如果不存在文件,则检查文件的存在和创建新文件,这是一个单独的操作,对于可能影响目录的所有其他文件系统活动都是原子操作。

(来自这个Javadoc:https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#createFile(java.nio.file.Path,%20java.nio.file.attribute.FileAttribute...) )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55725176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档