如何在杀死风暴拓扑之前调用特定方法。
我已经在风暴中创建了一个拓扑,我想在拓扑被杀之前调用特定的方法。
在storm框架中是否有任何预定义的重写或任何可用的方法。
提前致谢:)
答案 0 :(得分:4)
没有这样的事情......
作为一种解决方法,您可以在杀死拓扑之前deactivate
拓扑。这可以确保调用Spout.deactivate()
。
如果您需要通过螺栓调用方法,请使用Spout.deactivate()
发送"通知元组" (通过整个拓扑不包含要处理的数据)。并且在每个螺栓中,如果"通知元组",请调用您的特殊方法。收到了。
此外,这个"通知元组"必须通过螺栓转发给它的所有前辈。你需要确保"通知元组"被发送到每个螺栓的所有并行执行器。为此,请使用专用的"通知流"并通过allGrouping()
订阅每个螺栓到此蒸汽(除了常规输入流)。在每个螺栓中,您需要检查元组是否是通知元组(例如通过Tuple.getSourceStreamId()
)
清理完成后,您最终可以终止拓扑。