如何解决关系失败



我有一个处理器,似乎正在正确地创建FlowFiles(修改标准处理器),但当它去提交()会话时,引发一个异常:

2016-10-11 12:23:45,700 ERROR [Timer-Driven Process Thread-6] c.s.c.processor .files.GetFileData [GetFileData[id=8f5e644d-591c-4df1-8c79-feea118bd8c0]]由于{}org.apache.nifi.processor.exception.FlowFileHandlingException: StandardFlowFileRecord transfer relationship not specified导致文件检索失败

我假设这应该表明没有可用的连接来提交传输;然而,在init()期间注册了一个"成功"关系,其方式与原始处理器所做的相同,并且成功关系输出被连接到另一个处理器输入。

有什么排除故障的建议吗?

您对标准处理器做了哪些更改?如果你在ProcessSession对象上调用方法,确保你保存了从这些方法调用中返回的FlowFile的最新"版本",并且只将最新版本传输到"success"。

FlowFile引用是不可变的;通常在代码中,你会看到像"flowFile"这样的初始引用指向传入的流程文件(例如,来自session.get()),然后它会随着流程文件的变化而更新,例如flowFile = session.putAttribute(flowFile, "myAttribute", "myValue")

还要确保您已经将每个不同流程文件的最新版本(不是对同一流程文件的各种引用)转移或删除到某些关系(甚至是Relationship.SELF,如果需要的话)。如果您的处理器创建了一个新的流程文件,请确保传输了新的流程文件。如果传入的流文件不再需要,一定要对它调用session.remove()

在NiFi开发者指南中有一些常见的模式和额外的指导,包括测试模式;此处理器的单元测试应该能够清除此错误(通过断言在测试期间应该将多少流文件传输到哪个关系)。

相关内容

  • 没有找到相关文章

最新更新