Written by
hanhan
on
on
简单RPC
客户端侧代码:
public class ClientApp {
public static void main(String[] args) {
ServiceProxy.setZookeeperHost("127.0.0.1:2181");
AddService addService = ServiceProxy.newServiceProxy(AddService.class);
try {
int c = addService.add(999, 888);
System.out.println("计算结果是:" + c);
} catch (Exception e){
System.out.println(e);
}
}
}
服务端侧代码:
public class ServerApp {
public static void main(String[] args) {
RpcServer rpcServer = new RpcServerImpl(9999, 1, "127.0.0.1:2181");
rpcServer.register(AddService.class.getName(), AddServiceImpl.class, "127.0.0.1:9999");
rpcServer.start();
}
}
流程(客户端发起):
AddService addService = ServiceProxy.newServiceProxy(AddService.class)
- 上述
newServiceProxy
会调用Proxy.newProxyInstance(classload, interfaceList, handler)
addService.add(10, 20)
方法执行,此时会触发步骤2中handler的invoke
方法。invoke
方法:通过NettyClient
将步骤3中的服务名
、方法名
、参数类型
、参数
发送给NettyServer
。NettyServer
收到消息:- 服务名,拿到
clazz
- 方法名、参数类型, 拿到
method
- 服务名,拿到
- 然后调用
method.invoke(clazz.newInstance, args)
,将结果写回给NettyClient
。 NettyClient
收到结果,输入,OVER.