我是新来的Apache风暴。目前我正在开发一个遗留项目,该项目涉及使用apachestorm进行一些流处理。我想将当前项目与spring集成。我发现了一些评论(storm和Spring4集成,http://mail-archives.apache.org/mod_mbox/storm-user/201605.mbox/%3ccamwbcdz7myebs+z2mzdxwgqbpfjcq-tynoz_+pmprmy6umfuxa@mail.gmail.com%3e)说有人担心这样做。有人能告诉我怎么做这样的集成或者为什么不可能?
1条答案
按热度按时间watbbzwu1#
公平的警告,我没有在storm中使用spring,所以这完全是基于我对storm的了解,并且在非storm项目中使用spring,也就是说,这只是猜测。
我想你可以把Spring和Storm一起使用,但是有一些注意事项你应该注意。考虑到这些警告,spring是否仍然值得使用取决于您。
与springmvc应用程序不同,spring将不负责对象示例化或应用程序流。storm不知道spring,当您运行拓扑时,将由storm调用您的bolt/spout方法。这意味着您必须知道应用程序的某些部分将在spring上下文之外被调用。
我猜在拓扑部署的不同阶段,您可以在哪里使用spring。
当您设置拓扑并提交它时(包括
StormSubmitter.submitTopology
),您可以像在任何独立java应用程序中一样使用spring。e、 你可以像这个例子一样启动你的应用程序,把你所有的提交和连接代码都放进去Main.start
. 所有bolt/spout构造函数都将在此阶段运行,因此如果您愿意,可以在这里使用autowiring。你必须确保你的喷口和螺栓是串行化的。拓扑提交后,storm将序列化您的喷口和螺栓(以及这些对象中的任何非 transient 字段),并将它们发送到supervisor计算机,在那里它们将被反序列化。此时,如果您需要worker中可用的上下文,可以在worker钩子中创建一个上下文(通过
TopologyBuilder.addWorkerHook
),并通过钩子上的静态方法将其公开(这有点难看,但我看不到任何其他方法可以将其用于代码的其他部分)。重申一下,如果您决定在worker内部运行spring上下文,那么您必须知道spring上下文之外的storm将调用spout/bolt方法。