NiFi调用HTTP API后,如何在调用HTTP API之前获取原始流文件

时间:2019-07-02 11:18:08

标签: apache-nifi

我按以下顺序调用rest API。

生成FLowfile处理器-> jsonpath处理器->文本替换处理器(用于后期数据创建)---> InvokeHTTP --->用于属性的XPATH处理器--->由生成流文件生成的原始流文件

因此,在文本替换处理器之后,原始数据将被新数据替换。因此,如何获取原始数据并使用调用API后产生的属性。

3 个答案:

答案 0 :(得分:0)

您可以通过与GenerateFlowFile保持直接输出关系的方式来保存原始流文件,然后在碎片整理保留所有唯一属性的模式下,将流文件与MergeContent合并。 ,或者如果原始流程文件的内容足够小,则可以在更改流程文件内容之前将其移动到属性,然后在用Update Attribute / ReplaceText接收新数据后重新组合它们。

答案 1 :(得分:0)

在您拥有原始文件的位置插入UpdateAttribute,并评估某些唯一属性。

例如MyUID = ${UUID()}

success之后的UpdateAttribute连接应该进入准备流程以调用http,并且该连接的副本应该进入MergeContent,该结合了原始内容和评估内容和属性。 / p>

流量enter image description here

UUID和拆分: enter image description here

合并内容: enter image description here

答案 2 :(得分:0)

两个通用答案是:

  1. 合并内容,由dagget解释
  2. 按照here的描述等待/通知(最初是Andy)

这些解决方案应该很好地扩展,并且应该首先考虑。我个人觉得它们有点复杂,因此我在这里也提出了一个担忧。

如果您正在执行HTTP请求,则可能只在处理少量非常小的消息。在这种情况下,您可以考虑以下“技巧”以避免复杂性。

考虑(ab)使用属性而不是拆分

最简单的解决方法是将所有数据保持在一起。与其拆分邮件,不如将原始内容的副本放在属性中。无论您在内容中返回什么,此属性在您的HTTP请求之后仍将可用。

简单的解决方案是在HTTP请求之前使用ExtractText,并创建一个名为 original 的属性,并包含全部内容。

强制性警告:属性被设计为较小,因此存储在内存中。因此,将大量内容放入属性中可能会很快消耗您的内存。


针对将来的读者的最终解决方法:如果您控制HTTP服务,或者至少了解规范,请考虑是否希望让输出也包含输入。通常不是,但有时还是可以得到它!