Spout或Bolt可以访问拓扑中已知的ID吗?

时间:2014-12-18 19:21:56

标签: apache-storm

是否有用于Storm Spout或Bolt的API来访问其ID?我所指的ID是String传递给班级setSpout中的setBoltbacktype.storm.topology.TopologyBuilder方法。

访问此字符串以进行日志记录会很有用。

2 个答案:

答案 0 :(得分:3)

您可以在螺栓的prepare方法中对传递的拓扑上下文使用getThisComponentId():

@Override
public void prepare(Map config, TopologyContext context, OutputCollector collector) {
    this.collector = collector;

    String componentId = context.getThisComponentId();
}

以及用于喷口的开放式方法。

还有一个更通用的方法getComponentId(int taskId),它返回任何给定任务的组件ID。

答案 1 :(得分:0)

整数ID由70 给出。

对于Spouts:

getThisTaskId()

对于螺栓:

@Override
public void open(Map map, TopologyContext tc, SpoutOutputCollector soc) {
    System.out.println("\n\n\nThis Spout's ID is: "+context.getThisTaskId());
}