2015-09-28 75 views
0

我正在與Apache風暴,並試圖確保如果一個字段是由噴口(我有很多)創建並通過螺栓發送。這個想法只是跟隨它的定義,然後擺脫它。如何檢查一個字段是由噴口還是螺栓發送?

所以在我的嘴,我重寫,以增加計數器的

emit(List<Object> tuple, Object messageId) 

方法,我的問題是,我需要訪問的字段的名稱。

我如何可以訪問由

public void declareOutputFields(OutputFieldsDeclarer declarer) { 
    declarer.declare(new Fields("test")); 
} 

方法在同一噴出/螺栓定義的名稱?

我相信這很簡單,但我無法在文檔中找到它。

回答

0

我不知道是否完全理解你的問題。然而,Storm並沒有提供任何機制來訪問相同Spout/Bolt中Spout/Bolt的聲明輸出字段。而我其實不明白你爲什麼需要這個?如果實施噴出/博爾特,你居然知道得到了什麼聲明領域反正...

當然,你可以實現一個自己OutputFieldsDeclarer,並呼籲this.declareOutputFields(myDeclarer)事後存儲聲明的字段中myDeclarer來「訪問」他們。

0

當您創建拓撲時,您將爲每個噴嘴和螺栓給出一個名稱。所以,當你收到來自噴口或螺栓執行方法的任何元組,調用

input.getSourceComponent(); 

這將返回該組件的名稱,你可以輕鬆地識別嘴或螺栓。

如何訪問定義

要訪問字段的名稱的名字,你可以說

tuple.getValueByField("test")); 
相關問題