1.创建maven项目,并引入storm的依赖
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>1.1.0</version>
</dependency>
2.新建NumberSpout.java
public class NumberSpout extends BaseRichSpout {
//数据源的发射器,通过这个组件将tuple发射给下游
private SpoutOutputCollector collector;
//此方法是初始化方法,所以此方法用于组件的初始化
@Override
public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) {
this.collector = spoutOutputCollector;
}
//此方法用于声明向下游发射的tuple的key字段
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
//通过Fields来声明tuple的key字段,可以有多个
outputFieldsDeclarer.declare(new Fields("number"));
}
/**
* 此方法用于产生数据并向下游发射tuple
* 此方法会被调用多次,注意:不要将此方法变为阻塞方法
*
*/
@Override
public void nextTuple() {
//产生一个100内的随机数
int num = new Random().nextInt(100);
//把数字封装到tuple里,然后通过发射器发射出去
collector.emit(new Values(num));
}
}
3.新建PrintBolt.java
public class PrintBolt extends BaseRichBolt {
//创建bolt组件的发射器,用于向下游发射tuple
private OutputCollector collector;
/**
* 此方法是bolt组件的初始化方法
*/
@Override
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
this.collector = outputCollector;
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
}
/**
* 此方法是bolt组件用于接收上游发来的tuple
* 此外,如果有下游组件,也会在此方法中发射tuple
* @param tuple
*/
@Override
public void execute(Tuple tuple) {
//通过tuple的key取值
Integer number = tuple.getIntegerByField("number");
System.out.println(number);
}
}
4.创建NumberTopology.java
public class NumberTopology {
public static void main(String[] args) {
//创建storm的环境参数对象
Config config = new Config();
//创建拓扑构建着对象,通过这个对象可以绑定组件之间的关系
TopologyBuilder builder = new TopologyBuilder();
NumberSpout spout = new NumberSpout();
PrintBolt printBolt = new PrintBolt();
//绑定数据源组件①参:组件id,要求唯一性②组件的实列对象
builder.setSpout("numberSpout",spout);
//绑定bolt处理组件,通过传入上游组件的id,产生关系
builder.setBolt("printBolt",printBolt)
.globalGrouping("numberSpout");
//创建拓扑对象
StormTopology topology = builder.createTopology();
//storm的本地运行对象。本地模式一般用于测试
LocalCluster cluster = new LocalCluster();
//运行拓扑,①参:拓扑id,要求唯一性②参:storm的环境对象
//③参:storm的拓扑对象
cluster.submitTopology("numberTopology",config,topology);
}
}
整个案例代码:
https://download.csdn.net/download/weixin_49456013/82924997