如何在杀死风暴拓扑之前调用特定方法

时间:2015-08-20 12:06:33

标签: java kill apache-storm topology

如何在杀死风暴拓扑之前调用特定方法。

我已经在风暴中创建了一个拓扑,我想在拓扑被杀之前调用特定的方法。

在storm框架中是否有任何预定义的重写或任何可用的方法。

提前致谢:)

1 个答案:

答案 0 :(得分:4)

没有这样的事情......

作为一种解决方法,您可以在杀死拓扑之前deactivate拓扑。这可以确保调用Spout.deactivate()

如果您需要通过螺栓调用方法,请使用Spout.deactivate()发送"通知元组" (通过整个拓扑不包含要处理的数据)。并且在每个螺栓中,如果"通知元组",请调用您的特殊方法。收到了。

此外,这个"通知元组"必须通过螺栓转发给它的所有前辈。你需要确保"通知元组"被发送到每个螺栓的所有并行执行器。为此,请使用专用的"通知流"并通过allGrouping()订阅每个螺栓到此蒸汽(除了常规输入流)。在每个螺栓中,您需要检查元组是否是通知元组(例如通过Tuple.getSourceStreamId()

清理完成后,您最终可以终止拓扑。