Java 版本storm-demo

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值