1.本地模式DRPC
首先写一个类继承BaseRichBolt
public static class MyBlot extends BaseRichBolt{
//数据需要发送,所以将OutputCollector 定义出去
OutputCollector collector;
@Override
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
this.collector = collector;
}
@Override
public void execute(Tuple input) {
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
}
}
我们编写execut
@Override
public void execute(Tuple input) {
//获取请求的id
Object requestId = input.getValue(0);
//获取请求的参数
String name = input.getString(1);
//这边开始编写逻辑代码,我们就直接返回一个字符串即可
String result = "add user : "+name;
//这边使用collector.emit发送出去,参数是一个Values,我们需要发送两个数据
this.collector.emit(new Values(requestId,result));
}
然后我们编写declareOutputFields声明字段
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
//使用declarer.declare声明,参数是一个fields,fields里面参数和刚刚发送的数据保持一致
declarer.declare(new Fields("id","result"));
}
接下来编写main方法
public static void main(String[] args) {
//这边新建一个LinearDRPCTopologyBuilder,参数是函数名
LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("addUser");
//将我们创建的MyBlot添加进去
builder.addBolt(new MyBlot());
//新建一个本地集群
LocalCluster cluster = new LocalCluster();
//新建一个本地drpc
LocalDRPC drpc = new LocalDRPC();
//通过 cluster.submitTopology发送,里面有3个参数
//1.函数名
//2.新建一个condif就行了
//3.用过builder.createLocalTopology创建本地top,里面有个参数放入本地drpc
cluster.submitTopology("local-drpc",new Config(),builder.createLocalTopology(drpc));
String execute = drpc.execute("addUser", "zhangsan");
//我们将结果输出,方便展示我们以err形式输出
System.err.println("From client : "+execute);
//最后将本地关闭
cluster.shutdown();
drpc.shutdown();
}
然后运行查看控制台,注意控制台输出有点多,我们要找的在中间
运行成功
2.远程模式DRPC
拷贝上面的本地drbc代码进行修改,只要修改main方法就行
public static void main(String[] args) throws Exception{
//这边新建一个LinearDRPCTopologyBuilder,参数是函数名
LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("addUser");
//将我们创建的MyBlot添加进去
builder.addBolt(new MyBlot());
//使用StormSubmitter.submitTopology进行发送,参数有3个
//1.topologhy名
//2.new config就行了
//3.这边使用builder.createRemoteTopology()来创建
StormSubmitter.submitTopology("local-drpc",new Config(),builder.createRemoteTopology());
}
接下来我们修改参数,找到storm/conf/storm.yaml,添加下面代码
drpc.servers:
- “192.168.0.133”
drpc.port: 3777
storm.thrift.transport: “org.apache.storm.security.auth.plain.PlainSaslTransportPlugin”
接下来启动drpc服务
bin/storm drpc
将上面代码打包运行
bin/storm jar storm-1.0.jar com.zwb.RPC.RemoteDRPCTopology
这样就算在运行了
接下来开发一个本地客户端测试一下
public static void main(String[] args) throws Exception{
//新建一个config并配置参数,这些参数官网都有
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);
conf.put(Config.DRPC_MAX_BUFFER_SIZE, 1048576);
//新建一个drpc客户端,里面有3个参数:
//1.刚刚新建的config
//2.运行的host
//3.drpc端口,刚刚在配置文件配过了
DRPCClient drpcClient = new DRPCClient(conf,"hadoop000",3777);
//直接执行,里面有两个参数
//1.函数名
//2.args
String result = drpcClient.execute("addUser", "lisi");
System.out.println("Client invoked .. , result : "+result);
}
查看控制台:
这样我们一个远程连接rdbc就成功了