Hadoop的第一个rpc实现——hello likilone

服务端与客户端的网络通信

Hadoop的第一个rpc实现——hello world


目前所知道的有三种方式可以实现了吧

第一、就是通过scoket来实现,当然这是底层的;

第二、通过soap协议的webservice或框架的axis2;

第三、就是我们接下来的小例子,通过hadoop的rpc框架。


简要说明一下本例的需求,客户端发送一个字符串,服务端返回服务端的系统名字和这个字符串

先写客户端吧

1、创建共有的接口UserLoginiter


public interface UserLoginiter {
	public static final long versionID = 1L;
	public String login(String username);
	
}
需要注意以上接口的 versionID字段是必须填写的,否则在后期运行的时候会提示找不到版本号


这个接口是客户端接口,服务端接口应该和这个接口是一样的,接口名也是一样的。

2、不需要实现这个UserLoginIter接口

3、创建客户端启动程序


public class UserLoginController {

	
	
	public static void main(String[] args) throws Exception {
		
		Configuration conf = new Configuration();
		
		UserLoginiter uli = RPC.getProxy(UserLoginiter.class, 1L, new InetSocketAddress("MyCentOS", 10000), conf);
		
		String res = uli.login("likilone");
		
		System.out.println(res);
		
	}
	
	
}

对以上代码中RPC.getProxy里面的参数解释

第一个参数是:接口,共有的接口;

第二个参数是:版本号;

第三个参数是:远程服务端的ip地址和端口号;

第四个参数是:Configuration实例。


接下来我们开始创建服务端,大概也需要三步

1、创建共有的接口UserLoginIter,这个接口和客户端是一致的,这里就不再列出代码

2、实现这个接口


public class ServiceUserLogin implements UserLoginiter{

	@Override
	public String login(String username) {
		return "hello:"+username + ",您的系统是:"+System.getProperty("os.name");
	}

}
3、创建服务端



public class ServerStarter {

	
	public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
		
		Configuration conf = new Configuration();
		Builder builder = new RPC.Builder(conf);
		builder.setInstance(new LoginServiceImpl()).setBindAddress("MyCentOS").setPort(10000).setProtocol(UserLoginiter.class);
		Server server = builder.build();
		server.start();
		
		
	}
}


上面的bulider看起来使用了一个建造者模式

首先建造了一个UserLoginiter接口的实例;

再建造了一个服务端的IP;

再建造了一个服务端的端口;

再建造了一个接口。

自此,建造完成

最后获得一个Service,然后启动,启动后我们发现,服务端一直处于启动状态,这里的底层是不是使用了线程??大家可以猜猜


启动后,我们可以查看服务端是否打开了10000端口


[likilone@MyCentOS ~]$ netstat -nap | grep 10000
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 192.168.0.101:10000     :::*                    LISTEN      7544/java   

这个10000端口被java程序使用,说明我们的服务端已经被正常启用


然后启用客户端

就会返回以下信息

hello:likilone,您的系统是:Linux


如果您觉得本文章对您有用,也为了更好的运营博客,您可以点击这里捐助

评论 抢沙发

昵称 (必填) 邮箱 (必填)
表情