DRPC STORM example 网上好几个drpc的例子跑不通,还到处转载,这里放个跑得通的例子吧。


package drpc;

import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.LocalDRPC;
import org.apache.storm.StormSubmitter;
import org.apache.storm.drpc.DRPCSpout;
import org.apache.storm.drpc.ReturnResults;
import org.apache.storm.generated.StormTopology;
import org.apache.storm.topology.BasicOutputCollector;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.topology.base.BaseBasicBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import org.apache.storm.tuple.Values;
import org.apache.storm.utils.DRPCClient;
import org.apache.storm.utils.Utils;

import java.util.Map;


public class RuleV3 {
    public static class RuleBolt extends BaseBasicBolt {

        @Override
        public void declareOutputFields(OutputFieldsDeclarer declarer) {
            declarer.declare(new Fields("result", "return-info"));
        }
        @Override
        public void execute(Tuple tuple, BasicOutputCollector collector) {  //DRPCSpout declarer.declare(new Fields("args", "return-info"));
            String funargs = tuple.getString(0);//args
            String retInfo = tuple.getString(1);//return-info
            String result = "How are you,"+funargs+"!"+retInfo;
            collector.emit(new Values(result, retInfo));
        }
    }

    static StormTopology createTopology(DRPCSpout spout, RuleBolt bolt) {
        TopologyBuilder builder = new TopologyBuilder();
        builder.setSpout("SPOUT_ID", spout);//streamId["default"] = [("args", "return-info")]
        builder.setBolt("RULE_ID",bolt).noneGrouping("SPOUT_ID");//streamId["default"] = [("id", "return-info")]
        builder.setBolt("RET_ID", new ReturnResults()).noneGrouping("RULE_ID");
        StormTopology st = builder.createTopology();
        return st;
    }

    public static void main(String[] args) throws Exception {
        Config cnf = new Config();
        cnf.setDebug(false);
        cnf.setNumWorkers(1);
        if (args != null && args.length > 0) {
            if("pub".equals(args[0])) {//publish
                System.out.println("-------publish");
                DRPCSpout spout = new DRPCSpout("rulev3");
                RuleBolt bolt = new RuleBolt();
                StormSubmitter.submitTopologyWithProgressBar("drpc_RuleV3", cnf, createTopology(spout, bolt));
            }else{//remote run
                System.out.println("-------remote run "+args[0]);
                Map conf = Utils.readDefaultConfig();
                String host = args[0];//192.168.2.210
                @SuppressWarnings("resource")
                DRPCClient drpc = new DRPCClient(conf,host,3772);
                for(int i=0; i<100; i++){
                    System.out.println("------------------>"+drpc.execute("rulev3", "rulev3_order"+i+"json"));
                }
                drpc.close();
            }
        } else {//local run
            System.out.println("-------Local run");
            LocalDRPC drpc = new LocalDRPC();
            LocalCluster cluster = new LocalCluster();
            DRPCSpout spout = new DRPCSpout("rulev3", drpc);
            RuleBolt bolt = new RuleBolt();
            cluster.submitTopology("drpc_RuleV3", cnf, createTopology(spout, bolt));
            for(int i=0; i<100; i++){
                System.out.println("------------------>"+drpc.execute("rulev3", "rulev3_order"+i+"json"));
            }
            Utils.sleep(1000000000);
            cluster.killTopology("drpc_RuleV3");
            cluster.shutdown();
        }
    }
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值