Nifi:如何只传输 flowFile 列表中的最后一个文件?

Nifi: how to transfer only last file from the flowFile list?

我想从队列中获取文件大小大于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);

如果您从队列中获取流文件,则必须对其进行处理。

这段代码returns你一个流文件列表:

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
}