我想从queu中获取所有文件大小超过831的流文件然后将它们放入列表中,然后从列表中捕获最后一个流文件并转移到成功关系,最后删除所有其他流文件,这里是我的代码抛出转移关系未指定的例外情况,在这种情况下我应该改变什么?
import org.apache.nifi.processor.FlowFileFilter;
import groovy.json.JsonSlurper
import groovy.json.JsonBuilder
import java.nio.charset.StandardCharsets
import org.apache.commons.io.IOUtils
def flowFile = session.get()
def n=0;
if(!flowFile)return
def size = flowFile.getAttribute('fileSize');
log.error(size.toString())
int value = size as Integer;
if((value/831)>1){
def ffList = session.get(new FlowFileFilter(){
public FlowFileFilterResult filter(FlowFile ff) {
if( size == ff.getAttribute('fileSize') ) n++; return FlowFileFilterResult.ACCEPT_AND_CONTINUE
return FlowFileFilterResult.REJECT_AND_CONTINUE
}
})
session.transfer(ffList.get(n-1),REL_SUCCESS)
//session.remove(ffList);
}
session.remove(flowFile);
答案 0 :(得分:1)
如果从队列中获取流文件,则必须对其进行操作。
此代码返回一个flowFile列表:
def ffList = session.get(new FlowFileFilter(){...})
如果你的魔杖只是移除所有这些,除了最后一个,只需在转移最后一个之后放入此代码:
session.remove( ffList[0..-2] )
我想这一行有一个错误:
if( size == ff.getAttribute('fileSize') ) n++; return FlowFileFilterResult.ACCEPT_AND_CONTINUE
在任何情况下都执行了return FlowFileFilterResult.ACCEPT_AND_CONTINUE
命令,因为它不在if
下。
我认为应该是这样的:
if( size == ff.getAttribute('fileSize') ){
n++;
return FlowFileFilterResult.ACCEPT_AND_CONTINUE
}