RPC基本原理是客户端通过动态代理补全协议信息(类名、方法名、参数,requestId等),然后通过io(mina、netty实现)发送到服务端,服务端,服务端通过动态代理(或cglib等)和反射调用实现类。
动态代理需实现InvocationHandler接口,实现类提供全局变量用于容纳被代理对象的原始实例对象,并在invoke方法中进行功能扩展,动态代理可用来实现事务;被代理对象的增强实例由
Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
new Class[]{classType}, handler)
方法生成,需强制类型转换。
序列号可优化数据传输,常见的实现包括Protostuff、Thrift等
zookeeper实现注册与发现,每注册一个服务节点,所有客户端将更新服务列表;