apache-storm - 使用Storm时,如何从拓扑上下文访问对象?

标签 apache-storm

创建拓扑时,我们需要传递一个对象,以便 bolt 可以访问该对象并根据该对象进行一些进一步的处理。是否可以通过TopplogyContext传递对象,如果可以,怎么办?还是在提交拓扑之前,在提交拓扑之前还有其他方法可以传递对象,以便 bolt 可以在其上具有 handle /控件?

我们需要通过上下文传递对象,以便所有 bolt 都可以访问该对象,并且无需在该拓扑的所有 bolt 中强制实现构造函数。那么,想知道是否存在任何API可以执行相同的操作吗?

最佳答案

您可以在 Storm 配置图中传递该对象,前提是该对象可序列化。
在拓扑中任何喷嘴或 bolt 的prepare()方法中,您都可以检索该对象。

这是在拓扑提交时将对象放置在配置图中的方式:

Config conf = new Config();
MyObject myPreciousObject = new MyObject("precious");
conf.put("my.object",myPreciousObject);

StormSubmitter.submitTopology(args[0], conf, builder.createTopology());

这是在 bolt 或喷嘴的prepare()方法中检索它的方式:
prepare(Map stormConf,TopologyContext context) {

   MyObject myPreciousObject = (MyObject) stormConf.get("my.object");

} 

关于apache-storm - 使用Storm时,如何从拓扑上下文访问对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18009604/

相关文章:

parallel-processing - 如何在storm中调整并行提示

maven - java.lang.NoClassDefFoundError : org/yaml

apache-storm - Apache Storm 中的 Spout 节流

apache-storm - 向 Storm 提交拓扑

java - 使用 StormCrawler 抓取某些 url 时出现 X509 证书异常

xml - 执行 Storm 启动器时出错

twitter - Apache Flink与Twitter Heron?

java - OpenCV - Apache Storm 出现 'UnsatisfiedLinkError'

elasticsearch - logstash 与 spark streaming 和 storm

java - Bolt 的 Apache Storm Junit 测试用例