Apache nifi 尼菲:为什么';";“通知”;重置计数器以及“为什么”;“等等”;数错了吗?

Apache nifi 尼菲:为什么';";“通知”;重置计数器以及“为什么”;“等等”;数错了吗?,apache-nifi,Apache Nifi,我试图设置等待并通知进程,以便在几个复杂流完成时执行最终流。然而,我不明白为什么计数器不复位 最重要的是,当计数器大于“目标信号计数”属性时,等待进程将流文件发送到“成功”路径 删除和创建新的缓存客户端和服务器会重置计数器,并且问题不会再次出现,直到我在“通知”过程后清空队列。使用硬编码的释放信号标识符,等待处理器只会将流文件传递给成功关系一次。即,当信号计数器达到目标信号计数2时。当生成另一个流文件时,将使用相同的释放信号标识符。因此,notify处理器会将计数增加到2以上 最重要的是,等

我试图设置等待并通知进程,以便在几个复杂流完成时执行最终流。然而,我不明白为什么计数器不复位

最重要的是,当计数器大于“目标信号计数”属性时,等待进程将流文件发送到“成功”路径


删除和创建新的缓存客户端和服务器会重置计数器,并且问题不会再次出现,直到我在“通知”过程后清空队列。

使用硬编码的释放信号标识符,等待处理器只会将流文件传递给成功关系一次。即,当信号计数器达到目标信号计数2时。当生成另一个流文件时,将使用相同的释放信号标识符。因此,notify处理器会将计数增加到2以上

最重要的是,等待进程将流文件发送到“success” 计数器大于“目标信号计数”属性时的路径

否。当信号计数与目标信号计数完全匹配时,将向成功关系发送流文件

你可以用两种方法解决这个问题

首先,您可以使用动态释放信号标识符,该标识符在每次生成新的流文件时都会更改
GenerateFlowFile
创建一个filename属性,您可以使用该属性。这样,您就为每个新的流文件使用了一个新的缓存键,因此每个新的根流文件都有一个新的计数器

其次,您可以使用手动更新计数器

我创建一个流来测试第一个解决方案:

GenerateFlowFile包含一些简单的文本:

SplitText简单地分割文本,每行生成一个流文件。然后将原始流文件路由到等待处理器:

注意,我使用
${filename}
来设置动态释放信号标识符
${fragment.count}
SplitText
处理器提供,并保存该特定用例中的拆分或行总数。现在,您必须使用
Notify
处理器增加计数器:

一旦路由到
Notify
的所有行被释放,计数器名称
块的信号将被释放,
Wait
处理器将原始流文件路由到成功关系

PS:要深入了解等待/通知,您可以查看以下博文: