Там нет такой вещи ...
В качестве обходного пути, вы можете deactivate
топологию, прежде чем убить его. Это гарантирует, что вызывается Spout.deactivate()
.
Если вам нужно вызвать метод на болтах, используйте Spout.deactivate()
для отправки «кортежа уведомлений» (который не содержит данных, подлежащих обработке) через всю топологию. И в каждом болте вызовите свой специальный метод, если получен «кортеж уведомления».
Кроме того, этот «кортеж уведомлений» должен быть перенаправлен болтом всем его предшественникам. Вы должны убедиться, что «кортежи уведомлений» отправляются всем параллельным исполнителям каждого болта. Для этого используйте выделенный «поток уведомлений» и подписывайте каждый болт через allGrouping()
на этот пар (в дополнение к обычным входным потокам). В каждом болте вам нужно проверить, является ли кортеж кортежем уведомлений или нет (например, через Tuple.getSourceStreamId()
)
После завершения очистки вы можете окончательно уничтожить топологию.
Большое спасибо Маттиасу. – Kalpesh