一.drpc 的介绍

  1.rpc

    RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

  2.drpc

    drpc(Distributed Remote Procedure Call) - 分布式的远程过程调用。

  我们回顾一下前面学习的storm知识,知道storm是一个分布式的流式计算框架,由1台nimbus 和多台supervisor 组成,nimbus主要是把任务分发到不同的supervisor 上,而supervisor是分布在不同节点上的。在一个完整的topology中,spout是用来收集上游jobs的,然后再由nimbus负责分发给相应的supervisor,然后由worker来执行jobs,而drcp的调用是当我们想调用这个topology中的函数时,直接通过调用supervisorr上的worker就行,然后由worker线程来执行调用的过程。

  个人理解是:storm的drcp就是满足用户直接调用这个topology处理信息的,以前的可能是固定的收集数据,现在需要时,可以随时调用

二.drcp的调用

  1.本地的调用 

public class HelloDRPC {

    private static final Logger LOG = LoggerFactory.getLogger(HelloDRPC.class);

    public static void main(String[] args) throws AlreadyAliveException, InvalidTopologyException, AuthorizationException {

        boolean isRemote = !(args.length == 0);
LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("echo");
builder.addBolt(new EchoBolt(),1);// 第2个参数是:并行度 Config conf = new Config();
conf.setDebug(false);
conf.setNumWorkers(2); if(isRemote){ StormSubmitter.submitTopology("HelloDRPC", conf, builder.createRemoteTopology());
LOG.warn("==================================================");
LOG.warn("the topology {} is submitted.","HelloDRPC");
LOG.warn("==================================================");
}else{
LocalDRPC drpc = new LocalDRPC();
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("HelloDRPC", conf, builder.createLocalTopology(drpc));
Arrays.asList("hello","world","storm","java","kafka").forEach(
item ->
{
String result = drpc.execute("echo",item );
LOG.warn(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ");
LOG.warn(">>>>>>>>>>>>>>> result:{}",result);
LOG.warn(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ");
}
);
}
} public static class EchoBolt extends BaseBasicBolt{ @Override
public void execute(Tuple input, BasicOutputCollector collector) {
LOG.warn(" ================> tuple:{}",input.getFields());
Object id = input.getValue(0);
String name = input.getString(1);
System.err.println("------------------------------");
System.err.println("id: "+id +" name: "+ name);
System.err.println("------------------------------");
collector.emit(new Values(id,"echo: "+ name));
} @Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("id","value"));
}
}
}
//在无参情况下,直接运行 会将数据全部发出

  2.远程过程调用

    远程过程调用是将drcp当作一个服务端,然后由client去连接调用。

    1.drcp的配置

drpc.servers:
- "master"
drpc.port: 3777
storm.thrift.transport: "org.apache.storm.security.auth.plain.PlainSaslTransportPlugin" 本测试共3台虚拟机,1台nimbus 2台supervisor 在3台storm.yaml 分别配置以上内容,然后启动3台drcp服务
storm drpc &  #后台启动

    2.启动服务端

     将HelloDRPC 当作服务端,打成jar包,然后启动

storm jar storm_test-0.0.1-SNAPSHOT.jar com.drpc.HelloDRPC 1 

    3.客户端连接

public class HelloClientDRPC {

    private static final Logger LOG = LoggerFactory.getLogger(HelloClientDRPC.class);

    public static void main(String[] args) throws DRPCExecutionException, AuthorizationException, TException {
Config conf = new Config();
conf.put("storm.thrift.transport", "org.apache.storm.security.auth.plain.PlainSaslTransportPlugin");
conf.put(Config.STORM_NIMBUS_RETRY_TIMES, 3);
conf.put(Config.STORM_NIMBUS_RETRY_INTERVAL, 10);
conf.put(Config.STORM_NIMBUS_RETRY_INTERVAL_CEILING, 20); DRPCClient client = new DRPCClient(conf, "master", 3777);
String result = client.execute("echo", "hello");
System.out.println("result:"+result);
LOG.info("=====================================> "+ result); }
} //结果正常返回

storm drpc分布式本地和远程调用模式讲解的更多相关文章

  1. JavaEE(8) - 本地和远程调用的有状态以及无状态Session EJB

    1. 使用NetBeans开发Session Bean #1. 创建项目:File-->New Project-->Java EE-->EJB Module #2. 在项目中创建Se ...

  2. java RMI 远程调用

    1.背景 在学习代理模式的过程中接触到了远程调用,jdk有自己的RMI实现,所以这边自己实现了RMI远程调用,并记录下心得. 感受最深的是RMI和现在的微服务有点相似,都是通过"注册中心&q ...

  3. .net的远程调用

    .Net远程调用(转自:http://www.cnblogs.com/omilan/articles/3191378.html) 看到了这.net远程调用的讲解,觉得不错,拿来分享!! .Net对于远 ...

  4. dotNET使用DRPC远程调用运行在Storm上的Topology

    Distributed RPC(DRPC)是Storm构建在Thrift协议上的RPC的实现,DRPC使得你可以通过多种语言远程的使用Storm集群的计算能力.DRPC并非Storm的基础特性,但它确 ...

  5. Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)

    转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...

  6. Atitit.分布式远程调用  rpc  rmi  CORBA的关系

    Atitit.分布式远程调用  rpc  rmi  CORBA的关系 1. 远程调用(包括rpc,rmi,rest)1 2. 分布式调用大体上就分为两类,RPC式的,REST式的1 3. RPC(远程 ...

  7. 分布式远程调用SpringCloud-Feign的两种具体操作方式(精华)

    一 前言 几大RPC框架介绍 1.支持多语言的RPC框架,google的gRPC,Apache(facebook)的Thrift 2.只支持特定语言的RPC框架,例如新浪的Motan 3.支持服务治理 ...

  8. spring代理模式 service远程调用,插件执行

    最近,研究了一下平台远程调用的过程,和service层插件执行的原理,记录一下. 1.远程service调用过程 首先看一下类的继承结构 封装调用处理过程 封装service调用接口 封装servic ...

  9. openoffice excel word 转换pdf 支持本地调用和远程调用

    OpenOffice.org 是一套跨平台的办公室软件套件,能在Windows.Linux.MacOS X (X11)和 Solaris 等操作系统上执行.它与各个主要的办公室软件套件兼容.OpenO ...

随机推荐

  1. 获取select框下option所有值

    document.getElementById('roomId').options[0].value;获取第一个值 var roomIds = $("#roomId option" ...

  2. [Luogu] 线段树 2

    https://www.luogu.org/problemnew/show/P3373 双懒标记下放 先乘后加 #include <bits/stdc++.h> using namespa ...

  3. Django—Ajax

    Ajax-get url url(r'^ajax_add/', views.ajax_add), url(r'^ajax_demo1/', views.ajax_demo1), 视图 def ajax ...

  4. sqlserver 存储过程的新建与执行

    if Exists(select * from sysobjects where NAME = 'insert_custominfo' and type='P') drop procedure ins ...

  5. loadrunner11安装

    今天虚拟机里面装了下lr11,虚拟机版本是vm9.0,先在虚拟机里面装了windows2003,当然lr也是可以装在自己电脑上面的,但是最好是纯净的环境,由于我电脑东西比较多,所以我就装在虚拟机里面了 ...

  6. reGeorg(不需要外网ip的代理)

    reGeorg _____ ______ __|___ |__ ______ _____ _____ ______ | | | ___|| ___| || ___|/ \| | | ___| | \ ...

  7. 计算机中buffer和cache的理解

    Linux中Buffer和Cache的区别 Cache 和 Buffer的区别 作者:知乎用户链接:https://www.zhihu.com/question/26190832/answer/323 ...

  8. fsLayuiPlugin附件上传使用说明

    fsLayuiPlugin 是一个基于layui的快速开发插件,支持数据表格增删改查操作,提供通用的组件,通过配置html实现数据请求,减少前端js重复开发的工作. GitHub下载 码云下载 测试环 ...

  9. 使用PyMySQL连接MySQL错误

    使用PyMySQL连接MySQL错误 之前写了一个小项目,今天突然想起来,准备优化一下,但是原本好好的项目竟然跑不起来了 emmm....我真的啥都没干呀 具体错误是这样的: Traceback (m ...

  10. 安装VMware虚拟机和centos操作系统

    1,安装包:百度网盘: 2,安装教程:https://blog.csdn.net/qq_31362105/article/details/80706096  配置好操作系统,内存,网络等: 3,Cen ...