如果要使用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端接收到信息