如何在使用storm时将拓扑上下文中的对象访问到bolt中?

use*_*684 10 apache-storm

我们需要在创建拓扑时传递一个对象,以便bolt可以访问该对象并根据该对象进行进一步处理.是否有可能通过对象TopplogyContext,如果是,如何?或者在提交拓扑之前是否还有其他方法可以传递对象,然后提交,以便bolt可以对其进行句柄/控制?

我们需要通过上下文传递对象,以便所有螺栓都可以访问它,并且不需要在该拓扑的所有螺栓中强制构造函数的实现.那么,想知道是否存在任何API来做同样的事情?

Chr*_*lom 13

您可以在风暴配置映射中传递该对象,前提是它是可序列化的.在拓扑中任何spout或bolt的prepare()方法中,您可以检索此对象.

这是您将对象放在拓扑提交的配置映射中的方式:

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

StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
Run Code Online (Sandbox Code Playgroud)

这是你在bolt或spout的prepare()方法中检索它的方法:

prepare(Map stormConf,TopologyContext context) {

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

} 
Run Code Online (Sandbox Code Playgroud)