要了解Hadoop的消息通信机制先得了解下java的动态代理
这是一个装饰模式,用动态代理实现的,用静态工场生成被代理的具体实现类。这里是集合Set的代理。
定义泛型方法时必须在前面加一个<T>,来声明这是一个泛型方法,持有一个泛型T,然后才能用泛型T作为函数返回值。
InvocationHandler接口是用来拦截代理对象的方法调用的
接下来是代理对象的具体使用
可见使用代理对象后,对set进行了功能升级(包装模式),通过拦截代理对象的方法,完成打日志的功能
今天先写到这里,晚上有空的话在写吧,RPC是Hadoop通信核心,底层是通过动态代理来实现的,不过被代理的对象的具体实现类可能是在远程虚拟机中,类容很多,慢慢分析吧
花了好长时间理顺了RPC的调用时序图
整个调用过程是通过平时如何完成ls命令为线索分析的。核心类是RPC的两个内部类Client和Server,通信就是基于tcpip的socket咯,调用就是基于server端的java的反射咯