2015-09-28 67 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")); 
相关问题