Nifi - 在两个文件夹之间移动一对文件

Nifi - Moving a pair of files between two folders

美好的一天

我是 Apache Nifi 的新手,我对 Nifi 中的一些基本逻辑有困难(尽管我曾经担任过软件开发人员)。据我了解,Nifi 的流文件始终是一个“物理”文件(payload/content)及其元数据(属性)。

我如何保证文件对(两个属于彼此的文件)按照定义的顺序复制到另一个位置?

情况如下:

系统 B 有一个文件夹侦听器,它进一步处理 xml+pdf,如果 xml 在 pdf 之前存在,将会导致错误 - 这部分无法更改

我目前的方法行不通,我明白为什么,但我无法找到如何使用相应文件解决我的问题的解决方案。

  1. ListFile(在 XML 上过滤)
  2. FetchFile (${absolute.path}/${filename})
  3. FetchFile (${absolute.path}/${filename:substringBeforeLast('.'):append('.pdf')})
    • 如果失败,使用 RetryFlowFile
    • 重试 X 次
  4. RouteOnAttribute (${filename:toLower():endsWith('pdf')}) <-- 这里失败了,文件是 xml
  5. PutFile (pdf)
    • 失败则中止
  6. FetchFile (${absolute.path}/${filename})
  7. RouteOnAttribute (${filename:toLower():endsWith('xml')})
  8. PutFile (xml)

长话短说。我相信我这样做是完全错误的,我需要一些建议(不是解决方案;))

为什么要先获取 xml 文件?如果您只想在 pdf 出现时移动您的文件,您只需检查 pdf 何时出现,然后移动您的文件。

您可以执行以下操作:

  • Getfile(获取出现在文件夹 X 中的 pdf)
  • Putfile(将pdf放入文件夹Y)
  • UpdateAttribute(将文件名从 .pdf 更新为 .xml)
  • FetchFile 将 xml 文件移动到文件夹 Y。