Java NiFi:发送flowFile@OnflowFile

Java NiFi:发送flowFile@OnflowFile,java,apache-nifi,Java,Apache Nifi,是否可以在@OnStopped注释上发送流文件 基本上,我想编写自定义处理器,它可以在处理器停止时在flowFile中发送一个属性 有什么建议吗 我在下面尝试: ProcessSession session; @Override public void onTrigger(final ProcessContext context, final ProcessSession session) throws ProcessException { FlowFile flowFile = se

是否可以在
@OnStopped
注释上发送流文件

基本上,我想编写自定义处理器,它可以在处理器停止时在flowFile中发送一个属性

有什么建议吗

我在下面尝试:

ProcessSession session;

@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) throws ProcessException {
    FlowFile flowFile = session.get();
    if (flowFile == null) {
        flowFile = session.create();
    }
    flowFile = session.putAttribute(flowFile, "ATTRIBUTE_SIGNAL", "start");
    session.transfer(flowFile, success);
}

@OnStopped
public void sendStop() {
    FlowFile flowFile = session.get();
    flowFile = session.create();
    flowFile = session.putAttribute(flowFile, "ATTRIBUTE_SIGNAL", "stop");
    session.transfer(flowFile, success);
}
但它在这方面正在失败

2018-04-30 20:44:25,540 ERROR [StandardProcessScheduler Thread-3] org.apache.nifi.util.ReflectionUtils Failed while invoking annotated method 'public void com.kotak.nifi.processors.streaming.SignalGenerator.sendStop()' with arguments '[]'.
java.lang.reflect.InvocationTargetException: null.

像OnScheduled/OnStopped/etc这样的生命周期方法并不是真正用来生成流文件的,这就是为什么您不能访问ProcessSession,只有onTrigger可以

处理器通常被认为是松散耦合的,其中一个处理器并不真正了解/关心其他处理器,它只是从队列中取出一个流文件并对其进行处理


从技术上讲,您可以通过在处理器的成员变量中存储对OnTigger中获得的ProcessSession的引用来实现所需的功能,以便以后在OnStock中使用它。

OnScheduled/OnStopped/etc等生命周期方法并不是真正用来生成流文件的,这就是您无法访问流文件的原因ProcessSession,只有OnTigger可以

处理器通常被认为是松散耦合的,其中一个处理器并不真正了解/关心其他处理器,它只是从队列中取出一个流文件并对其进行处理


从技术上讲,您可以通过在处理器的成员变量中存储对OnTigger中获得的ProcessSession的引用来实现所需的功能,以便以后在OnStock中使用它。

感谢Bryan的支持!!我刚刚用代码编辑了我的问题。你能给我你的建议吗?在OnTigger中,你必须把“this.session=session”放在某个地方,现在你从来没有给成员变量赋值,所以当你在onStoppedThanks Bryan的repsonse中使用它时,它是空的!!我刚刚用代码编辑了我的问题。您能给我您的建议吗?在OnTigger中,您必须将“this.session=session”放在某个地方,现在您从未为成员变量赋值,因此在onStopped中使用时它是空的