NiFi:发送flowFile @OnflowFile

时间:2018-04-30 10:58:11

标签: apache-nifi

是否可以在@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在调用带注释的方法时失败' public void com.kotak.nifi .processors.streaming.SignalGenerator.sendStop()'有论据' []'。 java.lang.reflect.InvocationTargetException:null。

1 个答案:

答案 0 :(得分:4)

像OnScheduled / OnStopped / etc这样的生命周期方法实际上并不意味着生成流文件,这就是为什么你不能访问ProcessSession,只有onTrigger才能访问。

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

从技术上讲,您可以通过在处理器的成员变量中存储onTrigger中的ProcessSession的引用来实现您想要的效果,以便稍后在OnStopped中使用它。