前言:
本例中默认已经在eclipse中创建一个maven工程并配置hadoop资源。以下是pom.xml的配置信息
概述:
1: 在一个jvm中一个对象可以调用另一个对象的资源,但是如果是多个jvm,jvmA中的对象调用jvmB中的对象则需要借助于RPC协议来完成此操作。
:2:Rpc协议采用的是CS结构,请求方相当于一个客户机被请求方相当于服务器。
3:Java在使用Rpc协议通信时需使用接口org.apache.hadoop.ipc.VersionedProtocol来完成此功能。此接口中声明了两个方法:getProtocolVersion返回版本号,getProtocolSignature返回签名。
例子:
例子中代码分四部分。client、server、server的自定义协议,server自定义协议的实现
图1、client代码
图 2、server代码
图 3、 server端继承的VersionedProtocol接口
图4、server端接口的实现
运行结果
启动server端,启动client端,分别查看server和client控制台
图5 client控制台
图6 server控制台,server一直没有结束处于监听状态
代码总结:
图1:Client配置了要访问的ip地址和端口然后得到了一个代理,当调用heartBeat方法时向服务器端发送一个请求将签名信息以及其他的参数传递过去,接受返回后结束。图5就是client的输出。
图2:Server配置了需要监听的ip地址和端口并实现了org.apache.hadoop.ipc.VersionedProtocol接口完成自己的逻辑,当请求发送过来后他会接收Client发送过来的参数然后执行自己的逻辑,之后将返回值返回给Client。然后Client接收到返回值后就结束而Server则继续监听状态等待下一次的访问。
实际应用中Client可以把自己的状态信息发送给Server由Server对所有的Client进行处理。
总结:
Server实现一个声明了很多方法的接口并对外暴露此接口,Client通过调用此接口中声明的方法向server发送信息从而实现了与server的通信。而我们就称此接口为RPC通信协议,当然这是我的理解。