2016-02-15 3 views
0

У нас есть требование отключить носик на определенный интервал (с 9:00 до 9:00) каждый день. В настоящее время мы написали код в Spout, который проверяет, находится ли текущее время в этой длительности, если да, то ничего не делают, но этот подход постоянно вызывает следующий метод кортежа. Есть ли лучший способ сделать то же самое (с помощью config и т. Д.)?Отключите носик в течение определенного времени

ответ

1

Нет лучшего способа. И даже если Spout вызывается снова и снова, Storm будет применять штраф за сон, если на вызове next() не выдается выход, поэтому можно избежать «оживленной ситуации ожидания».

Если вы хотите улучшить, если штраф ожидания, вы можете реализовать собственный ISpoutWaitStrategy и зарегистрироваться для топологии через параметр topology.spout.wait.strategy (см. default.yaml).

0

Что предложил Маттиас, будет хорошо работать. Кроме того, вы можете также рассмотреть возможность дезактивации топологии в течение этой продолжительности. Клиент Nimbus может использоваться для программной деактивации топологии. nextTuple не будет вызван на носик, если топология деактивирована. Тем не менее, он отключит все носики топологии, которые вы, возможно, не захотите.

Смежные вопросы