如何检查喷口或螺栓是否发送了一个字段?

时间:2015-09-28 08:48:56

标签: java apache-storm

我正在处理apache风暴,并试图确保一个字段是由一个喷口创建的(我有很多)并通过螺栓发送。这个想法只是跟进它定义的地方,然后摆脱它。

所以在我的鲸鱼喷水中,我已经覆盖了

emit(List<Object> tuple, Object messageId)

方法为了增加一个计数器,我的问题是我需要访问字段的名称。

如何访问

定义的名称
public void declareOutputFields(OutputFieldsDeclarer declarer) {
    declarer.declare(new Fields("test"));
}

方法在同一个喷口/螺栓?

我相信它很简单但我在文档中找不到它。

2 个答案:

答案 0 :(得分:0)

我不确定是否完全理解你的问题。但是,Storm没有提供任何机制来访问同一Spout / Bolt中Spout / Bolt的声明输出字段。我实际上不明白你为什么需要这个?如果你实施了一个Spout / Bolt,你实际上知道哪个字段已经声明了......

当然,您可以实施自己的ln -s /opt/oracle/app/oracle/product/<YOUR_ORACLE_VERSION>/client_1/lib/libclntsh.so $ORACLE_HOME/libclntsh.so* 并致电OutputFieldsDeclarer并将声明的字段存储在this.declareOutputFields(myDeclarer)至&#34;访问&#34;他们之后。

答案 1 :(得分:0)

创建拓扑时,您将为每个喷口和螺栓命名。因此,当您从spout或bolt接收execute方法中的任何元组时,请调用

input.getSourceComponent();

这将返回组件的名称,您可以轻松识别喷口或螺栓。

如何访问定义的名称

要访问该字段的名称,您可以说

tuple.getValueByField("test"));