一.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. xShell终端中文乱码-解决方法

    中文乱码的原因有三种:(1)Linux系统的编码问题(2)xShell终端的编码问题(3)两端的语言编码不一致 linux系统编码 (1) locale:查看系统语言 (2)echo $LANG:查看 ...

  2. CF796C Bank Hacking 细节

    思路十分简单,答案只有 3 种可能,但是有一些细节需要额外注意一下. code: #include <bits/stdc++.h> #define N 300002 #define set ...

  3. CF #589 (Div. 2) D. Complete Tripartite 构造

    这个 D 还是十分友好的~ 你发现这 $3$ 个集合形成了一个环的关系,所以随意调换顺序是无所谓的. 然后随便让 $1$ 个点成为第 $2$ 集合,那么不与这个点连边的一定也属于第二集合. 然后再随便 ...

  4. 【luogu1325】雷达安装--贪心

    题目描述 描述: 假设海岸线是一条无限延伸的直线.它的一侧是陆地,另一侧是海洋.每一座小岛是在海面上的一个点.雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d.你的任务是建立尽量少 ...

  5. Codeforces 1272 A-E

    Codeforces 1272 A-E A Three Friends 直接枚举所有情况,共\(3\times 3\times 3=27\)种. code #include<bits/stdc+ ...

  6. Java面向对象4(P~U)

    P    3-1 Point类的构造函数 (SDUT 2670) import java.util.Arrays; import java.util.Scanner; public class Mai ...

  7. c语言 指针数组

    指针数组指针数组是数组,指针数组每个元素是一个指针指针数组的定义:type* parray[n]; type* 是数组中每个元素的类型parray 为数组名n为大小 例子:float* a[3] // ...

  8. jquery 页面input上传图后显示

    <input type="file" id="otherfiles" name="otherfiles" class="up ...

  9. Jenkins 插件加速下载

    本文主旨 看到好多加速Jenkins安装插件速度的文章,大多数教程中都是在插件配置里使用 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/up ...

  10. flask 中扩展 flask-login