在终止风暴拓扑之前如何调用特定方法

Kal*_*esh 6 java topology kill apache-storm

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

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

在Storm框架中是否有任何预定义的替代方法或任何可用的方法来做到这一点。

提前致谢:)

Mat*_*Sax 5

哪有这回事...

解决方法是,可以deactivate先删除拓扑,然后再取消拓扑。这样可以确保Spout.deactivate()被调用。

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

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

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