2015-09-28 3 views
0

Я работаю с штормом апачей и пытаюсь убедиться, что поле создано носиком (у меня его много) и отправлено болтами. Идея состоит в том, чтобы просто следить за тем, где она определена, а затем избавиться от нее.Как проверить, было ли поле отправлено носиком или болтом?

Так что в моем носик я переопределен метод

emit(List<Object> tuple, Object messageId) 

для того, чтобы увеличить счетчик, моя проблема заключается в том, что мне нужно, чтобы получить доступ к имени полей.

Как я могу получить доступ к именам, определенных метод

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

в том же носике/болте?

Я считаю, что это просто, но я не могу найти его в документации.

ответ

0

Я не уверен, полностью ли понимаю ваш вопрос. Тем не менее, Storm не предоставляет никакого механизма доступа к объявлению полей вывода Spout/Bolt в том же Spout/Bolt. И я действительно не понимаю, зачем вам это нужно? Если вы реализуете носик/Bolt, вы на самом деле знаете, что поле было объявлены в любом случае ...

Конечно, вы могли бы реализовать собственный OutputFieldsDeclarer и вызвать this.declareOutputFields(myDeclarer) и сохранить заявленные поля в myDeclarer на «доступ» их впоследствии.

0

Когда вы создаете топологию, вы дадите имя каждому из отверстий и болтов. Поэтому, когда вы получаете любой кортеж в способе выполнения из носика или болта, вызовите

input.getSourceComponent(); 

это вернет вам имя компоненты, вы можете легко определить, носик или болт.

Как я могу получить доступ имена, определенные

Чтобы получить доступ к имени поля, можно сказать,

tuple.getValueByField("test")); 
Смежные вопросы