我想知道何時Storm Spout上的各種方法被調用。有了Storm Spouts,何時調用declareOutputFields()?
我已經看了ISpout
javadoc,這給了我下面的心智模式:
"instantiated" -- open(...) -----> "activated"
"activated" -- deactivate() --> "deactivated"
"deactivated" -- activate() ----> "activated"
"activated" -- close() -------> "shutdown"
"deactivated" -- close() -------> "shutdown"
但我不知道什麼時候IComponent.declareOutputFields(...)
被調用。之前或之後open(...)
?何時需要聲明輸出流和字段?在declareOutputFields(...)
之內?或者可以保留對OutputFieldsDeclarer
的引用並在稍後對其進行定義?如果是這樣,它可以在一個單獨的線程?
我發現這個相關的問題(Testing Storm Bolts and Spouts),但答案似乎沒有指向任何設計原則或規範。