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.