如何在杀死storm拓扑之前调用特定方法。我在storm中创建了一个拓扑,我想在拓扑被杀死之前调用特定的方法。在storm框架中是否有任何预定义的重写或可用的方法来执行此操作。提前感谢:)
cmssoen21#
没有这回事。。。作为解决方法,您可以 deactivate 在杀死它之前先检查拓扑结构。这确保了 Spout.deactivate() 被称为。如果需要在bolts处调用方法,请使用 Spout.deactivate() 通过整个拓扑发送“通知元组”(不包含要处理的数据)。在每个bolt中,如果收到“通知元组”,则调用您的特殊方法。此外,这个“通知元组”必须由bolt转发给它的所有前辈。您需要确保“通知元组”被发送到每个bolt的所有并行执行器。为此,使用专用的“通知流”并通过 allGrouping() 到这个蒸汽(除了常规的输入流)。在每个bolt中,您需要检查元组是否是通知元组(例如通过 Tuple.getSourceStreamId() )清理完成后,最终可以终止拓扑。
deactivate
Spout.deactivate()
allGrouping()
Tuple.getSourceStreamId()
1条答案
按热度按时间cmssoen21#
没有这回事。。。
作为解决方法,您可以
deactivate
在杀死它之前先检查拓扑结构。这确保了Spout.deactivate()
被称为。如果需要在bolts处调用方法,请使用
Spout.deactivate()
通过整个拓扑发送“通知元组”(不包含要处理的数据)。在每个bolt中,如果收到“通知元组”,则调用您的特殊方法。此外,这个“通知元组”必须由bolt转发给它的所有前辈。您需要确保“通知元组”被发送到每个bolt的所有并行执行器。为此,使用专用的“通知流”并通过
allGrouping()
到这个蒸汽(除了常规的输入流)。在每个bolt中,您需要检查元组是否是通知元组(例如通过Tuple.getSourceStreamId()
)清理完成后,最终可以终止拓扑。