Storm:本地模式DRPC,远程模式DRPC

13 篇文章 0 订阅

先甩个官网链接

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就成功了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值