我正在处理apache风暴,并试图确保一个字段是由一个喷口创建的(我有很多)并通过螺栓发送。这个想法只是跟进它定义的地方,然后摆脱它。
所以在我的鲸鱼喷水中,我已经覆盖了
emit(List<Object> tuple, Object messageId)
方法为了增加一个计数器,我的问题是我需要访问字段的名称。
如何访问
定义的名称public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("test"));
}
方法在同一个喷口/螺栓?
我相信它很简单但我在文档中找不到它。
答案 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"));