【发布时间】:2020-10-14 20:17:59
【问题描述】:
以下是我正在处理的流程。
InvokeHTTP-->ExecuteScript-->ExecuteSQL
通过调用 HTTP,我得到两个流文件,一个带有请求,另一个带有响应。我已经为 ExecuteSQL 配置了事件驱动调度。由于在执行调用 HTTP 处理器后队列中有两个流文件,因此 ExecuteSQL 被触发两次,产生重复数据。我添加了带有以下常规代码的 ExecuteScript 处理器,以从队列中删除一个流文件。
import org.apache.nifi.processor.FlowFileFilter;
import org.apache.commons.io.IOUtils
def List<FlowFile> flowFileList = session.get(100)
def size = flowFileList.size();
log.error(size.toString())
int value = size as Integer;
def n=1;
for(FlowFile k in flowFileList){
if( n!=value ){
session.remove(k)
}
n++;
}
但我遇到了异常。
org.apache.nifi.processor.exception.FlowFileHandlingException: StandardFlowFileRecord[uuid=27d84996-25a6-41a0-a3e8-06ed2354de18,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1592992841858-2, container=default, section=2 ], offset=18153, length=500],offset=0,name=72212066-7bcd-456b-ba97-252d18986f72,size=500] 传输关系未指定
我还在 for 循环中添加了 session.transfer(k,REL_SUCCESS)。但它也不起作用。谁能告诉我这里出了什么问题,并建议是否有一种更简单的方法可以删除除一个之外的所有流文件来实现上述场景?
【问题讨论】:
标签: apache-nifi flowfile