我在自定义NiFi处理器中针对不同时间范围从远程API服务进行数据提取。
我有时间范围全局计数器,每次迭代都会更新(我使用定时器驱动的调度策略)。
当计数器大于最大值时,我想从 SUCCESS 关系中仅从请求(session.get()
)转移 FlowFile ,即不执行其他操作逻辑:
session.transfer(requestFlowFile, SUCCESS);
我认为在时间范围收集结束时我无法停止或暂停处理器。所以我尝试使用上述方法作为解决方案。
所有迭代都很顺利,直到计数器变得超过最大值并且处理器尝试从请求(session.get()
)传输 FlowFile
所以我有这个例外:
由于org.apache.nifi.processor.exception.FlowFileHandlingException,无法处理会话:StandardFlowFileRecord [uuid = 459e615b-0ff5-424f-aac7-f95d364cdc13,claim =,offset = 0,name = 99628180019265,size = 0]在本次会议中不知道
这里有什么问题?或者可能是另一种方法?
答案 0 :(得分:2)
该错误意味着传递给session.transfer()的流文件来自不同的会话。您只能在调用get()的同一会话中调用transfer()。
答案 1 :(得分:0)
如果它是自定义处理器 - 只是不要执行session.get()
并跳过此执行而不转移任何内容。
或者如果您需要传入文件来做出决定,您可以获取它,进行一些检查,并使用惩罚rollback(true)
回滚当前会话,这样您获得的文件将保留在传入队列中Penalty Duration
处理器参数,无需运行rocessor。
或者您可以session.get(
FlowFileFilter )
从传入的队列中获取与您的逻辑匹配的文件