Apache storm 等待submitToplogy完成

Apache storm 等待submitToplogy完成,apache-storm,Apache Storm,我正在读这本书。我在书中找到了以下代码片段 LocalCluster lc = new LocalCluster() lc.submitTopology("GitHub-commit-count-topology"), config, topology); Utils.sleep(TEN_MINUTES) lc.killTopology("GitHub-commit-count-topology") lc.shutdown() 因此,这段代码将提交拓扑以供执行,等待固定的10分钟,然后终止拓扑

我正在读这本书。我在书中找到了以下代码片段

LocalCluster lc = new LocalCluster()
lc.submitTopology("GitHub-commit-count-topology"), config, topology);
Utils.sleep(TEN_MINUTES)
lc.killTopology("GitHub-commit-count-topology")
lc.shutdown()
因此,这段代码将提交拓扑以供执行,等待固定的10分钟,然后终止拓扑。但这很奇怪。我怎么说呢。submitTopology等待它完成并完成。关闭和关闭

就像在Akka Streams中,我们得到了
未来[完成]
,我们只是等待未来的完成。(而不是固定的10分钟)。

您可以使用

在某些情况下不使用它的原因是它需要拓扑中的每个喷口来实现CompletableSpout接口

大多数风暴喷口从未达到“完成”的程度(因为它是一个流处理框架,而不是批处理框架),因此无法判断拓扑何时完成。例如,如果您正在使用来自卡夫卡主题的消息,制作人可能会在任何时候向该主题添加更多消息,那么消费者将如何确定它已完成使用

CompletableSpoot的存在主要是为了简化测试,因为这样一来,喷口就可以说它是否完成了。然后,我链接的completeTopology方法可以使用这个额外的功能来判断拓扑中的所有喷口是否都“完成”,并可以在此之后停止拓扑

如果您在测试中使用的喷口没有实现CompletableSpout(大多数喷口都没有实现),通常无法判断拓扑何时完成。在许多情况下,您仍然可以比链接的示例做得更好,例如,如果我的拓扑应该在测试中向队列写入10条消息,我可以在向队列写入10条消息后使测试结束

关于AkkAsvices,我不太熟悉它们,但是看介绍性文档,你可以考虑完整的PasePosits类似于有界的源(例如,Acth.CaseSoad(1到100)),而“正常”的喷口是无界的源(例如<代码>源。重复(1)< /代码>)。