基于Hadoop的RPC实现

13 篇文章 0 订阅

如果要使用RPC,首先需要导入hadoop-client的依赖

<dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.6.0</version>
</dependency>

我们先写一个用户接口及其实现类

package com.zwb.RPC;
//用户服务接口
public interface UserService {
	//这里设置了一个版本号,我们后面要用得上
	public static final long versionID= 88888888;     

    public void addUser(String name,int age);
}

package com.zwb.RPC;
//用户服务接口实现类
public class UserServiceImpl implements UserService {
    @Override
    public void addUser(String name, int age) {
        System.out.println("Server Invoked : add user success , name is " + name);
    }
}


然后我们写一个server端代码

//RPC 客户 端
public class RPCServer {
    public static void main(String[] args) throws Exception {

        Configuration configuration = new Configuration();
		//通过new一个RPC.Builder出啊犯贱一个builder,我们就通过这个builder进行访问
		//里面需要传入一个参数,我们在上面新建了一个hadoop的configuration 
        RPC.Builder builder = new RPC.Builder(configuration);
        
        //通过builder.setProtocol设置将接口class导入
        RPC.Server server = builder.setProtocol(UserService.class)
        		//这里设置其实现类
                .setInstance(new UserServiceImpl())
                //这里设置绑定的地址
                .setBindAddress("localhost")
                //这里设置端口号
                .setPort(9999)
                //获得server
                .build();

		//开启server
		server.start();
    }
}

然后我们写一个client端代码

public class RPCClient {
    public static void main(String[] args) throws Exception{
		
        Configuration configuration = new Configuration();
        //这边定义了一个版本号,注意变量名为versionID不能乱起
        long versionID= 88888888 ;
        //里面有一个参数定义了端口号
        InetSocketAddress inetSocketAddress = new InetSocketAddress(9999);

		//通过RPC.getProxy创建,里面有4个参数
		//1.接口class
		//2.客户端版本号
		//3.上面新建的InetSocketAddress
		//4.上面新建的 Configuration 
        UserService userService = RPC.getProxy(UserService.class, versionID, inetSocketAddress, configuration);
        userService.addUser("zhangsan",30);
        System.out.println("client invoked");
        
        //要用RPC.stopProxy关闭
        RPC.stopProxy(userService);
    }
}

开始测试
首先运行server端
在这里插入图片描述
这样就开起来l,然后我们执行client端
在这里插入图片描述
控制台打印出client invoked
这时我们回到server端控制台
在这里插入图片描述
server端接收到信息

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值