012-storm的drpc通信

1、基本概念
     Storm DRPC中,接收用户操作请求的是DRPCSpout,把接收到的用户请求交给Bolt去执行。这里的Bolt是我们用户需要写代码实现的。Bolt计算完成之后,把结果发射出去,给ReturnResults bolt。该bolt负责把结果送给server

drpc分布式远程过程调用
storm中的DRPC提供了集群中处理功能的访问接口。相当于集群向外暴露一个功能接口,用户可以在任何地方进行调用。
LinearDRPCTopologyBuilder已过时,被trident取代


实现DRPC流程图:  
1、代码方式演示drpc远程过程调用

1.1 集群模式开启DRPC服务
——修改storm/conf/storm.yaml   把drpc.servers的值改为192.168.2.33
—— 在192.168.3.33执行storm/bin/storm  drpc启动drpc server
——拷贝storm.yaml到其它节点上
scp storm.yaml hadoop@cloud05:/home/hadoop/app/storm-0.9.3/conf/
scp storm.yaml hadoop@cloud06:/home/hadoop/app/storm-0.9.3/conf/
scp storm.yaml hadoop@cloud07:/home/hadoop/app/storm-0.9.3/conf/

1.2 编写DRPC的服务端和客户端
/**
 * DRPC客户端
 * @author shenfl
 *
 */
public class DRPCRemoteClient {

    
    public static void main(String[] args) {
          DRPCClient client = new DRPCClient("192.168.2.33", 3772);
          try {
             String rs = client.execute( "hello", "world");
             System. out.println("客户端调用结果: "+rs);
         } catch (TException e ) {
              e.printStackTrace();
         } catch (DRPCExecutionException e ) {
              e.printStackTrace();
         }
    }
}




/**
 * DRPC服务端
 *
 * @author shenfl
 *
 */
public class DRPCRemoteTopology {

    /**
     * 用户自定义bolt
     */
    public static class MyBolt extends BaseRichBolt {

          private OutputCollector collector ;

          public void prepare(Map stormConf, TopologyContext context, OutputCollector collector ) {
              this.collector = collector ;
         }

          /**
          * 传递过来的tuple有2个元素,第一个函数信息,第二个参数信息
          */
          public void execute(Tuple input) {

             String info = input.getString(1);
              this.collector .emit(new Values(input.getValue(0), "hello " + "\t" + info ));
         }

          public void declareOutputFields(OutputFieldsDeclarer declarer ) {
              declarer.declare( new Fields("funcName" , "info"));
         }
    }

    /**
     * 服务端的主线程类
     *
     * @param args
     */
    public static void main(String[] args) {

          LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("hello") ;
          builder. addBolt(new MyBolt()) ;
          try {
          /*if(args.length==0){//本地模式运行
                 LocalCluster localCluster = new LocalCluster();
                 ILocalDRPC drpcServer = new LocalDRPC() ;
                 localCluster.submitTopology("drpcLocalTopology",new Config(), builder.createLocalTopology(drpcServer));
                 
                 String rs = drpcServer.execute("hello", "world");
                 System.out.println("客户端调用结果: "+ rs);
             }else{
                 //集群模式
                 StormSubmitter.submitTopology(DRPCRemoteTopology.class.getSimpleName(), new Config(),
                          builder.createRemoteTopology());
             }*/
             
                          //集群模式
             StormSubmitter. submitTopology(DRPCRemoteTopology. class.getSimpleName(), new Config(),
                           builder. createRemoteTopology());
         } catch (Exception e ) {
              e.printStackTrace();
         }
    }
}


1.3  启动服务端
[hadoop@cloud03 ~]$ storm jar stormdrpc.jar storm.drpc.DRPCRemoteTopology
1.4 客户端验证



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾文教编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值