示例代码:

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. android开发步步为营之68:Facebook原生广告接入总结

    开发应用的目的是干嘛?一方面当然是提供优质服务给用户,还有一方面最重要的还是须要有盈利.不然谁还有动力花钱花时间去开发app? 我们的应用主攻海外市场,所以主要还是接入国外的广告提供商.本文就今天刚完 ...

  2. 超好用文件对比工具 – Beyond Compare

    超好用文件对比工具 – Beyond Compare,开发中文件.目录对比神器,有了它,再也不用为找不到修改的内容而发愁了. 具备的丰富实用功能: 并列比较文件夹.FTP 网站或 Zip 文件: 为以 ...

  3. 利用PCA来简化数据

    13.2.2 在NUmpy中实现PCA 将数据转换成前N个主成分的伪代码大致如下: 去除平均值 计算协方差矩阵 计算协方差矩阵的特征值和特征向量 将特征值从大到小排列 保留最上面的N个特征向量 将数据 ...

  4. sql 删除多项

    delete from 表名 where 字段 in(值,值,值.......)

  5. hdu 1232

    以前写的.....拿出来看看.... 并查集模板: #include <iostream> #include <string> using namespace std; int ...

  6. 系统管理中 bash shell 脚本常用方法总结

    在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则 1. 单引号和双引号的区别 单引 ...

  7. Win7启动修复MBR(Win7+Linux删除Linux后进入grub rescue的情况)

    事因:我的笔记本原先同时安装了Win7+Linux,昨天发现硬盘实在不够用(才60G,虽然还有个500G的移动硬盘),就想把里面的Ubuntu格了.都是用虚拟机做测试的多.后来就格了Ubuntu所在的 ...

  8. iOS-封装静态库

    最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework.在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法 ...

  9. dom方法读取xml(不常用)

    Book.java package com.xml.demo; public class Book { private int id; private String name; private Flo ...

  10. fabric自动化部署django

    使用fabric部署django应用 使用fabric部署django应用 本文是我的网站易读中文网自动化部署的脚本实现,以下代码在ubuntu和debian中测试通过 由于网站使用的是python技 ...