Storm项目04——storm DRPC的简单示例

前提:

在storm集群上完成drpc的配置,即修改storm.yaml文件,添加以下内容:(storm01是storm集群的主节点)

drpc.servers:
   - "storm01"

启动storm的drpc服务,执行以下命令

storm drpc&

 

 

在eclipse中创建maven项目,编写实现DRPC Server的代码

package com.xnmzdx.storm.drpc1.server;

import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.LocalDRPC;
import backtype.storm.StormSubmitter;
import backtype.storm.drpc.LinearDRPCTopologyBuilder;
import backtype.storm.generated.AlreadyAliveException;
import backtype.storm.generated.InvalidTopologyException;
import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;

public class BasicDRPCTopology {
	
	public static class ExclaimBolt extends BaseBasicBolt{

		private static final long serialVersionUID = 1L;

		public void execute(Tuple input, BasicOutputCollector collector) {
			String value = input.getString(1);//这里取得的就是客户端传进来的client.execute("exclamation", word)中的word的值
			collector.emit(new Values(input.getValue(0),value + "!"));//input.getValue(0)得到的可能是tuple的序号之类的,
		}

		public void declareOutputFields(OutputFieldsDeclarer declarer) {
			declarer.declare(new Fields("id","result"));
		}
	}	
	
	public static void main(String[] args) throws AlreadyAliveException, InvalidTopologyException {
		//创建drpc实例,定义功能名称为exclamation
		LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("exclamation");
		//添加bolt
		builder.addBolt(new ExclaimBolt(),3);
		Config conf = new Config();
		if(args == null || args.length == 0) { //如果没有传入参数,则运行本地模式
			LocalDRPC drpc = new LocalDRPC();
			LocalCluster cluster = new LocalCluster();
			cluster.submitTopology("drpc-demo", conf, builder.createLocalTopology(drpc));
			for(String word : new String[] {"hello","goodbye"}) {
				System.out.println("Result for \""+word+"\":"+drpc.execute("exclamation", word));
			}
			cluster.shutdown();
			drpc.shutdown();
		}else {//运行集群模式
			conf.setNumWorkers(2);
			StormSubmitter.submitTopology(args[0], conf, builder.createRemoteTopology());
		}
	}
	
	
}

编写client的代码,模拟客户端调用刚刚编写的exclamation功能

package com.xnmzdx.storm.drpc1.client;

import org.apache.thrift7.TException;

import backtype.storm.generated.DRPCExecutionException;
import backtype.storm.utils.DRPCClient;

public class ExclamDrpcClient {

	public static void main(String[] args) throws TException, DRPCExecutionException {
		//创建DRPC客户端
		DRPCClient client = new DRPCClient("192.168.213.240", 3772);
		System.out.println(client);
		for(String word : new String[] {"hello","goodbye"}) {
			//"exclamation"是客户端向服务器调用的DPRCTopology的功能名称
			System.out.println(client.execute("exclamation", word));//调用集群中的exclamation功能做运算,并获得返回值
		}
	}

}

注意:先将此项目打成jar包,上传到storm集群上使用以下命令运行起来,然后再运行client端的代码,即ExclamDrpcClient 类

#com.xnmzdx.storm.drpc1.server.BasicDRPCTopology是jar包中需要运行的类的完整名称
storm jar storm04-0.0.1-SNAPSHOT.jar com.xnmzdx.storm.drpc1.server.BasicDRPCTopology 参数1,参数2,....

至此,就模拟使用了storm的drpc功能

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值