赞
踩
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45922715
2.客户端能够的对象中的方法必须位于对象的接口中。
- package com.lyz.hadoop.rpc;
-
- import org.apache.hadoop.ipc.VersionedProtocol;
-
- /**
- * 设置代理对象的返回值必须为接口类型
- * 此接口用于接收RPC客户端创建代理对象的返回值
- * @author liuyazhuang
- *
- */
- public interface MyBiz extends VersionedProtocol{
- /**
- * 定义的接口
- * @param name
- * @return
- */
- public String hello(String name);
- /**
- * 版本号
- */
- long VERSION = 1001;
-
- }

- package com.lyz.hadoop.rpc;
-
- import java.io.IOException;
-
- /**
- * MyBiz接口的实现类
- * @author liuyazhuang
- *
- */
- public class MyBizImpl implements MyBiz {
-
- @Override
- public long getProtocolVersion(String protocol, long clientVersion)
- throws IOException {
- return MyBiz.VERSION;
- }
-
- @Override
- public String hello(String name){
- System.out.println("服务端被调用了");
- return "hello "+name;
- }
- }

- package com.lyz.hadoop.rpc;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.ipc.RPC;
- import org.apache.hadoop.ipc.RPC.Server;
-
- /**
- * RPC服务端
- * @author liuyazhuang
- *
- */
- public class MyServer {
- public static final String SERVER_ADDRESS = "localhost";
- public static final int SERVER_PORT = 12345;
- public static void main(String[] args) throws Exception {
- /**
- * 构造一个rpc server
- * @param instance:实例中的方法会被客户端调用
- * @param bindAddress:绑定的地址用于监听连接
- * @param port:绑定的端口用于监听连接
- * @param conf:the Configuration to use
- */
- Server server = RPC.getServer(new MyBizImpl(), SERVER_ADDRESS, SERVER_PORT, new Configuration());
- server.start();
- }
- }

- package com.lyz.hadoop.rpc;
-
- import java.net.InetSocketAddress;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.ipc.RPC;
-
- /**
- * RPC客户端
- * @author liuyazhuang
- *
- */
- public class MyClient {
- public static void main(String[] args) throws Exception {
- MyBiz proxy = (MyBiz) RPC.waitForProxy(MyBiz.class,
- MyBiz.VERSION,
- new InetSocketAddress(MyServer.SERVER_ADDRESS, MyServer.SERVER_PORT),
- new Configuration());
- String result = proxy.hello("world");
- System.out.println("客户端的调用结果为:"+result);
- RPC.stopProxy(proxy);
- }
- }

注意:调用方(也可以称为客户端)也必须有和服务端一样的一个接口,代码一致,且所在包也需得一致(实测如果包名不一致的话,会报org.apache.hadoop.ipc.RpcServerException): Unknown protocol 异常)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。