Apache storm 使用storm时,如何将对象从拓扑上下文访问到螺栓中?

Apache storm 使用storm时,如何将对象从拓扑上下文访问到螺栓中?,apache-storm,Apache Storm,我们需要在创建拓扑时传递一个对象,以便螺栓可以访问该对象,并基于该对象进行进一步处理。是否可以通过TopplogyContext传递对象?如果可以,如何传递?或者,在提交拓扑之前,是否有其他方法在提交拓扑时传递对象,以便bolt可以在其上拥有句柄/控件 我们需要通过上下文传递对象,以便所有螺栓都可以访问它,并且不需要强制在该拓扑的所有螺栓中实现构造函数。因此,想知道是否存在任何API来执行相同的操作吗?我不太清楚您的意思,但是您的bolt类在初始化时始终可以接受一个参数,您可以使用创建拓扑时要传

我们需要在创建拓扑时传递一个对象,以便螺栓可以访问该对象,并基于该对象进行进一步处理。是否可以通过
TopplogyContext
传递对象?如果可以,如何传递?或者,在提交拓扑之前,是否有其他方法在提交拓扑时传递对象,以便bolt可以在其上拥有句柄/控件


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

我不太清楚您的意思,但是您的bolt类在初始化时始终可以接受一个参数,您可以使用创建拓扑时要传递的对象来初始化该参数

TopologyBuilder builder = new TopologyBuilder();
builder.setSpout( "spout", new mySpout() );
builder.setBolt( "bolt", new myBolt1(myObj) ).shuffleGrouping("spout");
你的bolt构造函数可以把这个对象作为参数

编辑:
如果您希望在不将数据显式传递给构造函数的情况下访问该数据,您可以再次创建一个静态类来存储该数据并从bolt对象访问它

您可以在storm配置映射中传递该对象,前提是该对象是可序列化的。 在拓扑中任何喷口或螺栓的prepare()方法中,可以检索此对象

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

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

StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
以下是在螺栓或喷嘴的prepare()方法中检索它的方式:

prepare(Map stormConf,TopologyContext context) {

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

} 

虽然这确实解决了一个螺栓实现的问题……它迫使我在拓扑构建的所有螺栓中使用具有相同对象“myObj”的构造函数……我们需要传递螺栓“myObj”在所有螺栓的拓扑中无缝…@user1996684如果您希望在不显式地将数据传递给构造函数的情况下访问数据,您可以再次创建一个静态类来存储此数据并从螺栓对象访问它。