14.7 DRPC

什么是DRPC: --是分布式远程调用

– RPC(Remote Procedure Call Protocol)——远程过程调用协议

– Distributed RPC:rpc请求流式、并进行处理

– RPC请求参数当做输入流,结果当做输出流

– 利用storm的分布式进行处理机制和能力

– 借助DRPC server接收请求、返回相应

Storm只能获取数据,不能接请求和发响应,所以这里借助一个DRPC Server来帮 助完成

DRPC把大量请求分布式的去做,一次请求如果串行的话可能会比较慢,我并行的来 处理,另一方面通过来降低平均一次请求的时间,解决了响应的吞吐

配置DRPC:apache-storm-0.9.5/conf/storm.yaml

修改drpc.servers配置,同步到其他节点

drpc.servers:

- "node2"

#启动DRPC server:

1,首先启动storm集群

, 2,然后:./bin/storm drpc >> ./logs/drpc.out 2>&1 & 在主节点上启动就行


在集群创建DRPC:给这个方法打jar包,放到storm集群中运行:

./bin/storm jar /opt/local/drpc.jar com.bjsxt.basic.drpc.ManualDRPC drpc

package com.bjsxt.basic.drpc;

 

import backtype.storm.Config;

import backtype.storm.LocalCluster;

import backtype.storm.LocalDRPC;

import backtype.storm.StormSubmitter;

import backtype.storm.drpc.DRPCSpout;

import backtype.storm.drpc.ReturnResults;

import backtype.storm.generated.AlreadyAliveException;

import backtype.storm.generated.InvalidTopologyException;

import backtype.storm.topology.BasicOutputCollector;

import backtype.storm.topology.OutputFieldsDeclarer;

import backtype.storm.topology.TopologyBuilder;

import backtype.storm.topology.base.BaseBasicBolt;

import backtype.storm.tuple.Fields;

import backtype.storm.tuple.Tuple;

import backtype.storm.tuple.Values;

/**

 * 在集群创建DRPC

 * @author root

 *

 */

public class ManualDRPC {

 public static class ExclamationBolt extends BaseBasicBolt {

 

  @Override

  public void declareOutputFields(OutputFieldsDeclarer declarer) {

   declarer.declare(new Fields("result", "return-info"));

  }

//可以写自己的逻辑

  @Override

  public void execute(Tuple tuple, BasicOutputCollector collector) {

   String arg = tuple.getString(0);

   Object retInfo = tuple.getValue(1);

   collector.emit(new Values(arg + "!!!", retInfo));

  }

 

 }

 

 public static void main(String[] args) {

  TopologyBuilder builder = new TopologyBuilder();

  LocalDRPC drpc = new LocalDRPC();

 

  if (args.length > 0) {

   DRPCSpout spout = new DRPCSpout("exclamation");

   builder.setSpout("drpc", spout);

   builder.setBolt("exclaim", new ExclamationBolt(), 3)

     .shuffleGrouping("drpc");

   builder.setBolt("return", new ReturnResults(), 3).shuffleGrouping(

     "exclaim");

 

   Config conf = new Config();

   try {

    StormSubmitter.submitTopology(args[0], conf,

      builder.createTopology());

   } catch (AlreadyAliveException e) {

    e.printStackTrace();

   } catch (InvalidTopologyException e) {

    e.printStackTrace();

   }

  } else {

   DRPCSpout spout = new DRPCSpout("exclamation", drpc);

   builder.setSpout("drpc", spout);

   builder.setBolt("exclaim", new ExclamationBolt(), 3)

     .shuffleGrouping("drpc");

   builder.setBolt("return", new ReturnResults(), 3).shuffleGrouping(

     "exclaim");

 

   LocalCluster cluster = new LocalCluster();

   Config conf = new Config();

   cluster.submitTopology("exclaim", conf, builder.createTopology());

  }

 }

}


Java创建客户端连接DRPC:DRPC在集群上创建之后,eclipse可以运行

package com.bjsxt.basic.drpc;

 

 

import org.apache.thrift7.TException;

 

import backtype.storm.generated.DRPCExecutionException;

import backtype.storm.utils.DRPCClient;

/**

 * 创建客户端访问DRPC

 * @author root

 *

 */

public class MyDRPCclient {

 

 /**

  * @param args

  */

 public static void main(String[] args) {

 

  DRPCClient client = new DRPCClient("node2", 3772);

  try {

   String result = client.execute("exclamation", "hello ");

   

   System.out.println(result);

  } catch (TException e) {

   e.printStackTrace();

  } catch (DRPCExecutionException e) {

   e.printStackTrace();

  } 

 }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值