示例代码:

package com.lky.test;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test; import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.LocalDRPC;
import backtype.storm.drpc.DRPCSpout;
import backtype.storm.drpc.ReturnResults;
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;
import backtype.storm.utils.Utils; /**
* @ClassName: manualDRPC
* @Description: storm 分布式RPC学习
* @author Administrator
* @date 2015年10月23日
* @version 1.0
*/
public class manualDRPC { private static Log log = LogFactory.getLog(manualDRPC.class); @SuppressWarnings("serial")
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);
log.info("execute----------->"+arg+"--------"+retInfo);
collector.emit(new Values(arg + "!!!", retInfo));
}
} @Test
public void test(){
TopologyBuilder builder=new TopologyBuilder();
LocalDRPC drpc=new LocalDRPC();//本地RPC //构建topology
DRPCSpout drpcSpout=new DRPCSpout("exclation",drpc);
builder.setSpout("drpc", drpcSpout,2);
builder.setBolt("exam", new ExclamationBolt(),4).shuffleGrouping("drpc");
builder.setBolt("return", new ReturnResults(),4).shuffleGrouping("exam"); //配置topology
Config config=new Config();
config.setDebug(true);
config.setMaxSpoutPending(1000);
config.setNumWorkers(2); //本地集群
LocalCluster localCluster=new LocalCluster();
localCluster.submitTopology("test", config, builder.createTopology()); //本地和storm交互
System.out.println("-------------"+drpc.execute("exclation", "luo")+"-------------");
System.out.println("-------------"+drpc.execute("exclation", "lky")+"-------------"); Utils.sleep(1000*10);
drpc.shutdown();
localCluster.killTopology("test");
localCluster.shutdown();
} }
package com.lky.test;

import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test; import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.LocalDRPC;
import backtype.storm.drpc.LinearDRPCTopologyBuilder;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import backtype.storm.utils.Utils; /**
* @ClassName: drpcTopology
* @Description:线性drpc学习
* @author Administrator
* @date 2015年10月23日
*
*/
public class drpcTopology { @SuppressWarnings("serial")
public static class Exclation extends BaseRichBolt {
private static Log log = LogFactory.getLog(Exclation.class);
private OutputCollector _outputCollector; @Override
public void execute(Tuple tuple) {
String res = null;
try {
res = tuple.getString(1);
if (null != res) {
_outputCollector.emit(new Values(tuple.getValue(0), res + "!!!!"));
log.info("execute 发射消息-------->" + res);
} } catch (Exception e) {
log.error("execute处理异常!!!");
}
} @Override
public void prepare(@SuppressWarnings("rawtypes") Map conf, TopologyContext context, OutputCollector outputCollector) {
this._outputCollector = outputCollector;
} @Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("id", "result"));
}
} @SuppressWarnings("deprecation")
@Test
public void testDRPC() {
// LinearDRPCTopologyBuilder帮助我们自动集成了DRPCSpout和returnResults(bolt)
LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("text");
builder.addBolt(new Exclation(), 3); Config config = new Config();
LocalDRPC drpc = new LocalDRPC(); LocalCluster cluster = new LocalCluster();
cluster.submitTopology("drpc-test", config, builder.createLocalTopology(drpc)); for (String word : new String[] { "hello", "word" }) {
System.out.println("result \"" + word + "\": " + drpc.execute("text", word));
} Utils.sleep(1000 * 5);
drpc.shutdown();
cluster.killTopology("drpc-test");
cluster.shutdown();
} }

Storm drpc学习的更多相关文章

  1. storm drpc分布式本地和远程调用模式讲解

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

  2. Storm DRPC实现机制分析

    DRPC是建立在Storm基本概念(Topology.Spout.Bolt.Stream等)之上的高层抽象,个人理解它的目标是在Storm 集群之上提供一种分布式的RPC框架,以便能够利用Storm快 ...

  3. Storm入门学习随记

    推荐慕课网视频:http://www.imooc.com/video/10055 ====Storm的起源. Storm是开源的.分布式.流式计算系统 什么是分布式呢?就是将一个任务拆解给多个计算机去 ...

  4. Storm入门(十二)Twitter Storm: DRPC简介

    作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/756/twitter-stor ...

  5. Flume-ng+Kafka+storm的学习笔记

    Flume-ng Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume的文档可以看http://flume.apache.org/FlumeUserGuide.html ...

  6. 【Storm】学习笔记

    Storm 1 基本概念 1.1 分布式.可扩展.高容错.实时流处理.跨语言 1.2 应用场景 1.2.1 实时分析 1.2.2 在线机器学习 1.2.3 分布式RPC 1.2.4 ETL数据抽取 1 ...

  7. Storm个人学习总结

    https://www.jianshu.com/p/c7fba7d6a24d https://www.cnblogs.com/peak-c/p/6297794.html https://blog.cs ...

  8. storm学习路线指南

    关于对storm的介绍已经有很多了,我这里不做过多的介绍,我介绍一下我自己的学习路线,希望能帮助一些造轮子的同学走一些捷径,毕竟我也是站在前人总结整理的基础上学习了,如果有不足之处,还请大家不要喷我. ...

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

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

随机推荐

  1. php 读xml的两种方式

    <?xml version="1.0" encoding="ISO-8859-1"?> <st> <stu> <nam ...

  2. Ajax调用webService(一) 不跨域。

    注:需要的js文件与组件(jquery-1.4.2.min.js和Newtonsoft.Json) 同域:要调用的webservice与ajax请求页面在同一个网站下(本文中都是本地测试). 数据库( ...

  3. bash 编程中循环语句用法

    1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...

  4. mvc wcf 并发提示,存储Application,验证是否有用户在操作

    System.Web.HttpContext httpContext = System.Web.HttpContext.Current; Hashtable departmentSalary = (H ...

  5. 用CALayer实现聚光灯效果

    效果图: 代码部分: #import "ViewController.h" @interface ViewController () @property (nonatomic, s ...

  6. 总结:如何获取同一个DIV里的多个不同子标签的值,并赋值给input?

    这个问题说起来简单,但对于新手来说,也着实卡了好久,并且我在网上搜了好久没能找到合适的答案, 于是去博问问了一下,得到许多大神们的帮助与回答,接下来我就总结一下能够实现这个效果的几种方法,既为了自己更 ...

  7. js鼠标右键操作

    一个页面中,BODY中用oncontextmenu='return false'来取消鼠标右键: 在JS中设置oncontextmenu='return true'用window.document. ...

  8. QT 5.1.1 for Android 开发环境搭建与配置【Windows 7】

    前言:本人操作系统为Windows7 64位,用的是32位的安装包,32位系统没有验证. 一.首先下载以下安装包,如果提供的链接失效请自行下载: (1) Android SDK (Windows 32 ...

  9. 你好,C++(13)这道单选题的答案是A、B、C还是D?3.7 枚举类型

    3.7  枚举类型 除了之前我们介绍的数值数据和文字数据之外,在现实世界中,常常还会遇到这样一类数据:一道单选题的答案只能是A.B.C.D四个选项中的某一个:红绿灯的颜色只能是红色,绿色和黄色中的某一 ...

  10. [BZOJ]3737 [Pa2013]Euler

    从这个FB开始写博客啦. 也不知道会坚持多久…… = =似乎要加一句转载请注明出处 http://www.cnblogs.com/DancingOnTheTree/p/4026076.html htt ...