当前位置: 首页 > 知识库问答 >
问题:

如何处理每10秒通过ftp接收的50k文件

颜森
2023-03-14

我有50K台机器,每台机器都有一个唯一的ID。每隔10秒,计算机将在ftp服务器中的machine_feed目录中发送一个文件。不是同时接收所有文件。

计算机将使用其id名创建文件。我需要处理所有收到的文件。如果文件没有在短时间内处理,那么机器将发送新文件,这将覆盖现有文件,我将松散现有数据。

文件不大。它只包含一行信息。

问题是如果文件较少,那么它的工作就很好。如果文件正在增加,那么尽管文件是有效的,但它正在错误文件夹中移动。

当camel轮询文件时,找到零长度文件,然后将该文件复制到错误目录中,则该文件包含有效数据。一些骆驼如何轮询没有完全复制的文件。

有没有人知道解决这个问题的好办法?。

提前道谢。

共有1个答案

邹修真
2023-03-14

我以前也遇到过类似的问题,但我使用了一套略有不同的工具。

我建议看一看Apache Flume,它是一个轻量级的java进程。这是我在我的情况下使用的。文档是相当不错的,所以您应该能够找到您的方法,但我只是想给出一个简单的介绍无论如何,只是让您开始。

水槽有3个主要部件,每一个部件都可以通过各种方式配置:

  1. 源-负责数据源的组件
  2. 通道缓冲组件
  3. 接收器-这将表示数据需要登陆的目的地

还有其他可选的组件,比如拦截器--它主要用于拦截流和执行基本的过滤、转换等。

对于每一个组件都有各种各样的选项可供选择,但是如果没有一个可用的选项适合您的用例-您可以编写自己的组件。

  1. 由于您的文件位置几乎需要连续监视,您可能希望使用Flume的假脱机目录源,它将连续监视您的machine_feed目录,并在文件到达时立即将其取走(您可以选择在文件被覆盖之前更改名称)。

因此,我们的想法是拿起文件并将其交给处理目录,然后继续使用Apache Camel进行处理,就像您已经在做的那样。

您的水槽设置可能如下所示:

  • 假脱机目录源
  • 拦截器之一(可选:用于在将数据插入DB之前进行处理。如果可用的选项都不合适--您甚至可以编写自己的自定义拦截器)
  • 其中一个通道(内存通道-可能是...)
  • 最后,一个接收器(在您的情况下,这可能只需要一个自定义接收器,以便将数据登陆到DB中)

希望这能帮上忙。

 类似资料:
  • 问题内容: 我需要每10秒从服务器收到一个状态。 我试图通过服务发送一个http请求来做到这一点。 问题是我的代码只能执行一次。 这是我的服务代码: 谢谢很多阿维 问题答案: 将处理程序放入onPostExecute中以在10秒后发送http请求 10秒后,将再次执行doInBackground,然后再次执行onPostExecute,再次处理程序,依此类推。

  • 问题内容: 我正在考虑将WCF用于一个项目,该项目需要人们能够将大文件(64MB-1GB)上传到我的服务器。我将如何使用WCF处理此问题,可能还具有恢复上传的功能。 为了处理更大的客户群,我想通过WCF测试JSON。这将如何影响文件上传?可以通过JSON完成,还是需要将上传部分切换到REST? 问题答案: 如果要上传大文件,则肯定需要查看WCF流模式。 基本上,您可以更改绑定上的传输模式;默认情况

  • 问题内容: 我正在通过一个Intent传递一个int,但是我不知道如何接收它,因为我必须从OnCreate方法中接收一个intent,但是如果我将其放置在那里,则无法将其与其余代码中的另一个int进行比较:我在这里发送意图: 在这里,我收到它: 但是在onCreate方法之后,我必须这样做: 问题答案: 您需要获取在方法中传递的数据,而不是在声明中。 另外你不发送,正在发送中。所以,你需要得到从。

  • 我已经尝试了。所有的失败都表明协议必须是HTTP或HTTPS。 Node有可用的FTP客户端(在npmjs上可用)。但是,根据他们的文档,他们需要创建一个到FTP服务器的连接,更改目录,然后下载它。 有什么简单的解决方法吗?

  • 我想每10秒执行一段代码。我在这个论坛上找到了一个例子,但我的实现有一些问题。 我得到这个错误,指向:

  • 问题内容: 我如何从一个大的日志文件中读取最后两行而不将其完全加载到内存中? 我需要每10秒钟阅读一次(在Win机上)…并且我被困在尝试阅读最后几行。 日志文件类似于: 谢谢! 问题答案: 您可以使用file.Seek()或file.ReadAt()几乎结束,然后向前阅读。除非您知道2行= x字节,否则您只能估计从哪里开始搜索。 您可以使用os.Stat(name)获得文件长度 这是一个基于Rea