Apache nifi Nifi:如何编写自定义处理器

Apache nifi Nifi:如何编写自定义处理器,apache-nifi,Apache Nifi,我想写一个nifi处理器,它可以从hdfs目录中读取xml文件,然后将其数据提取到flowfile属性中,如果有两个nifi处理器可以获取此文件并读取数据或将某些内容写入其中,我如何进行文件锁定,以便一次只有一个处理器可以使用它?你能给我推荐一些能帮助我的文章、代码示例或相关资料吗。我还没有编写任何自定义处理器。这里有两个问题: 1-如何将XML提取到Flowfile属性中? 选项: SplitXML -> EvaluateXPath (destination flowfile attri

我想写一个nifi处理器,它可以从hdfs目录中读取xml文件,然后将其数据提取到flowfile属性中,如果有两个nifi处理器可以获取此文件并读取数据或将某些内容写入其中,我如何进行文件锁定,以便一次只有一个处理器可以使用它?你能给我推荐一些能帮助我的文章、代码示例或相关资料吗。我还没有编写任何自定义处理器。

这里有两个问题:

1-如何将XML提取到Flowfile属性中?

选项:

SplitXML -> EvaluateXPath (destination flowfile attribute) ->ReplaceText (to use the attributes)

TransformXML -> SplitJSON-> evaluateJsonPath (destination flowfile attribute) ->ReplaceText (to use the attributes)
2-如何确保文件只处理一次? getfile/gethdfsproc有“保留源文件”选项,在处理时是move/remove/Keep选项。
您可以将其移动到暂存区域,并在处理后向后移动

我不确定在这种情况下为什么需要编写自定义处理器,因为
GetHDFS
EvaluateXPath
处理器都存在,并且应该能够在此执行必要的任务

在将flowfile内容提取到属性中时要小心,因为flowfile内容存储在内容存储库中,并且当flowfile在流中移动时,只传递一个引用指针。但是,属性以内联方式存储在flowfile存储库中,并占用堆空间进行快速检索。如果不小心的话,很容易接受一大块源数据并意外地将整个数据块放入堆中。有关更多详细信息,请参阅

如果您仍然对执行定制处理器开发感兴趣,这是一个很好的起点。引用的版本已经过时,但所描述的过程应该可以很好地运行。问题是另一个。最后,还有checkstyle说明、配置开发环境的提示等