2015-08-20 23 views
4

如何在殺死風暴拓撲之前調用特定方法。如何在殺死風暴拓撲之前調用特定方法

我在風暴中創建了一個拓撲,我想在拓撲被殺之前調用特定的方法。

是否有任何預定義的重寫或任何方法可用於在風暴框架中執行此操作。

感謝提前:)

回答

4

有沒有這樣的事情......

作爲一種變通方法,你可以殺死它之前deactivate拓撲。這確保,即Spout.deactivate()被調用。

如果您需要通過螺栓調用方法,請使用Spout.deactivate()通過整個拓撲發送「通知元組」(不包含要處理的數據)。並且在每個螺栓中,如果收到「通知元組」,則調用您的特殊方法。

此外,這個「通知元組」必須由螺栓轉發給它的所有前輩。您需要確保將「通知元組」發送給每個螺栓的所有並行執行器。爲此,請使用專用的「通知流」,並通過allGrouping()訂購每個螺栓(除常規輸入流之外)。在每個螺栓中,您需要檢查元組是否是通知元組(例如,通過Tuple.getSourceStreamId()

清理完成後,可以最終終止拓撲。

+0

非常感謝Matthias。 – Kalpesh