我有一个Storm拓扑,该拓扑从远程服务器读取,然后处理其螺栓中的文本。
当喷嘴检测到没有剩余数据要读取时,同时又让螺栓有时间完成处理时,我想停用/关闭喷嘴。
我尝试在spout中使用deactivate()方法,方法是在检测到没有数据可读取时调用它。我不知道如何使它工作(找不到太多有关它的文档)。
当我发现没有可读取的数据时,我决定调用在喷口中编写的波纹管方法。我在关闭拓扑时使用KillOptions来指定一些等待时间,但是只要调用该方法,它就会继续杀死它,而无需等待。
private void endReading() {
Map conf = Utils.readStormConfig();
conf.put("nimbus.seeds", "localhost");
NimbusClient cc = NimbusClient.getConfiguredClient(conf);
Nimbus.Client client = cc.getClient();
try {
KillOptions ko = new KillOptions();
ko.set_wait_secs(600);
ko.set_wait_secs_isSet(true);
client.killTopologyWithOpts("local-topology", ko);
} catch (TException e) {
e.printStackTrace();
}
}
我不正确地使用KillOptions吗?有没有一种更简单的方法来关闭喷嘴,同时给螺栓留出时间?任何建议将不胜感激。
编辑:我正在本地运行它,这就是它不起作用的原因,如答案的后续解释中所述。
答案 0 :(得分:1)
您在做什么是一个很好的解决方案。您发布的代码在运行时将关闭整个拓扑。请记住,它将同时关闭调用它的喷口和同一拓扑中的任何其他喷口。