2016-11-10 81 views
1

我有一個處理器,似乎正在創建FlowFiles(修改標準處理器),但是當它去提交()會話時,會引發異常:如何解決關係失敗?

2016-10-11 12:23:45,700 ERROR [由定時器驅動的進程線程6] cscprocessors.files.GetFileData [GetFileData [id = 8f5e644d-591c-4df1-8c79-feea118bd8c0]]由於{} org.apache.nifi.processor.exception未能檢索文件。 FlowFileHandlingException:未指定StandardFlowFileRecord傳輸關係

我假設這應該表示沒有可用的連接來提交傳輸;然而,在init()中註冊的「成功」關係與原始處理器所做的一樣,並且成功關係輸出應該與其他處理器輸入相連。

有關排除故障的任何建議嗎?

回答

4

你對標準處理器做了哪些改變?如果您正在調用ProcessSession對象上的方法,請確保保存從這些方法調用返回的FlowFile的最新「版本」,並僅將最新版本傳輸到「成功」。

FlowFile引用是不可變的;通常在代碼中,您會看到像「flowFile」這樣的初始引用,它指向傳入的流文件(例如,從session.get()),然後在流文件發生變化時進行更新,如flowFile = session.putAttribute(flowFile, "myAttribute", "myValue")

此外,請確保您已將最新版本的每個不同流文件(不是對同一個流文件的各種引用)轉移或刪除到某種關係(如果需要的話,甚至是Relationship.SELF)。如果您的處理器創建新的流文件,請確保傳輸新的流文件。如果傳入的流文件不再需要,請務必在其上撥打session.remove()

NiFi Developer's Guide中有一些常見模式和附加指導,包括測試模式;你對這個處理器的單元測試應該能夠清除這個錯誤(通過聲明在測試期間應該將多少個流文件轉移到哪個關係中)。