1.首先在服务器中,我的是在centos01主机中写服务端程序,并用hadoop中自带的PRC工具包实现简单的RPC服务端服务程序:
注意:必须导入hadoop中的common中的核心包和依赖的lib中的jar包。
2.建一个名为LoginServerInterFace接口,有login(String name,String password)抽象方法。代码如下:
package com.zhichao.wan.rpc;
import org.apache.commons.collections.map.StaticBucketMap;
public interface LoginServerInterFace {
public static final long versionID=1L;
public String Login(String name,String password);
}
3.建一个LoginServerImpl方法实现该接口,代码如下:
package com.zhichao.wan.rpc;
public class LoginServerImpl implements LoginServerInterFace{
@Override
public String Login(String name, String password) {
// TODO Auto-generated method stub
return name+" had Logged success!";
}
}
4.写一个starter类用于绑定服务,代码如下:
package com.zhichao.wan.rpc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Builder;
import org.apache.hadoop.ipc.RPC.Server;
public class Starter {
public static void main(String[] args) throws Exception{
Builder builder = new RPC.Builder(new Configuration());
builder.setBindAddress("Centos01").setPort(10000).setProtocol(LoginServerInterFace.class).setInstance(new LoginServerImpl());
Server server = builder.build();
server.start();
}
4.到此,服务端的程序已经完成,运行服务器程序。控制台没有出错:
5.回到windows客户端的编写。
注意:windows需要能够访问虚拟机里的主机名。即能够ping Centos01成功!
6.首先需要将协议(即接口类)拷贝到本地文件系统
7.编写LoginController类:
package com.zhichao.wan.rpc;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
public class LoginController {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
LoginServerInterFace proxy = RPC.getProxy(LoginServerInterFace.class,
1L, new InetSocketAddress("Centos01", 10000),
new Configuration());
String result = proxy.Login("wanzhi", "123456");
System.out.println(result);
}
}
8.运行结果: