如何以编程方式杀死风暴拓扑?

我正在使用java类向Storm集群提交拓扑,我还计划使用java类来终止拓扑。 但是根据风暴文档 ,以下命令用于终止拓扑,并且没有Java方法(这有正当理由)

storm kill {stormname} 

那么从java类调用shell脚本来终止拓扑是否可以呢? 杀死拓扑的其他方法有哪些?

另外,如何获得在Storm集群中运行拓扑的状态?

要杀死拓扑,您可以尝试这样做

 import backtype.storm.generated.KillOptions import backtype.storm.generated.Nimbus.Client; import backtype.storm.utils.NimbusClient import backtype.storm.utils.Utils Map conf = Utils.readStormConfig(); Client client = NimbusClient.getConfiguredClient(conf).getClient(); KillOptions killOpts = new KillOptions(); //killOpts.set_wait_secs(waitSeconds); // time to wait before killing client.killTopologyWithOpts(topology_name, killOpts); //provide topology name 

获取拓扑运行的状态

 Client client = NimbusClient.getConfiguredClient(conf).getClient(); List topologyList = client.getClusterInfo.get_topologies(); // loop through the list and check if the required topology name is present in the list // if not it's not running 

从Storm 1.0.0开始,从nimbus.seeds或bolt中杀死拓扑需要你通过nimbus.seeds指定nimbus主机位置(或者如果你没有通过代码执行它,你需要指定nimbus.seeds在storm.yaml文件):

 import org.apache.storm.utils.NimbusClient; import org.apache.storm.utils.Utils; void somewhereInASpoutOrBolt() { Map conf = Utils.readStormConfig(); conf.put("nimbus.seeds", "localhost"); NimbusClient cc = NimbusClient.getConfiguredClient(conf); Nimbus.Client client = cc.getClient(); client.killTopology("MyStormTopologyName"); } 

请注意,这样做也会结束您的程序。