Java 的RPC:remote procedure call 远程过程调用

RPC:remote procedure call 远程过程调用

 Hadoop实现了RPC协议

(*) Server

(*) Client

========================================================================

(*) RPC服务Server端

1、首先定义自己的接口实现Hadoop的VersionedProtocol接口

2、定义接口的实现类

3、RPC定义在Hadoop服务端的的主程序

-------------------------------------------------------------------------------------------------------------------------------

1、首先定义自己的接口实现Hadoop的VersionedProtocol接口

package demo.rpc.server;

import org.apache.hadoop.ipc.VersionedProtocol;

public interface MyBusiness extends VersionedProtocol {


//定义自己的签名,就是一个ID号。通过这个ID号,就能区分在客户端调用的时候,调用的是哪个具体的实现
//变量的名字必须叫:versionID
public static long versionID = 1l;

//定义自己的方法
public String sayHello(String name);
}

---------------------------------------------------------------------------------------------------------------------------

2、定义接口的实现类

package demo.rpc.server;

import java.io.IOException;

import org.apache.hadoop.ipc.ProtocolSignature;


public class MyBusinessImpl implements MyBusiness {


@Override
public ProtocolSignature getProtocolSignature(String arg0, long arg1, int arg2) throws IOException {
//返回我们的签名
return new ProtocolSignature(versionID, null);
}


@Override
public long getProtocolVersion(String arg0, long arg1) throws IOException {
// 返回你的ID
return versionID;
}


@Override
public String sayHello(String name) {
System.out.println("************ 服务器端被调用了  **************");
//自己的方法
return "Hello " + name;
}


}

----------------------------------------------------------------------------------------------------------------

3、RPC定义在Hadoop服务端的的主程序

package demo.rpc.server;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server;


public class MyRPCServer {


public static void main(String[] args) throws Exception {
//使用HDFS的RPC Server来部署我们的程序
RPC.Builder builder = new RPC.Builder(new Configuration());

builder.setBindAddress("localhost");
builder.setPort(7788);

//部署我们的程序
builder.setProtocol(MyBusiness.class);//部署接口
builder.setInstance(new MyBusinessImpl());//定义接口实现类,客户端调用的时候,需要指定相同的签名

//生成RPC Server
Server server = builder.build();
server.start();
}


}

=======================================================================

(*) RPC服务Client端

1、得到一个RPC客户端

2、RPC调用部署在Server上代理对象

/*

MyBusiness proxy = RPC.getProxy(MyBusiness.class,      //调用的接口
     MyBusiness.versionID, //需要跟服务器定义的签名一样
     new InetSocketAddress("localhost", 7788),    //服务器的地址
     new Configuration());

*/

package demo.rpc.client;

import java.net.InetSocketAddress;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

import demo.rpc.server.MyBusiness;


public class MyRPCClient {


public static void main(String[] args) throws Exception {
//得到一个RPC的客户端,通过这个客户端去调用RPC Server的程序

MyBusiness proxy = RPC.getProxy(MyBusiness.class,      //调用的接口
    MyBusiness.versionID, //需要跟服务器定义的签名一样
    new InetSocketAddress("localhost", 7788),    //服务器的地址
    new Configuration());


//通过RPC代理对象来调用服务器的方法
System.out.println(proxy.sayHello("Tom"));
}


}
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值