Job类中实现了InvocationHandler 接口的是 Invoker, 这种语法是java语言对代理模式的一种支持,最终对对象的调用都会成为对代理
的调用。下面看看真正的处理代理的代码Invoker。
其中factory的默认是
<property>
<name>hadoop.rpc.socket.factory.class.default</name>
<value>org.apache.hadoop.net.SocksSocketFactory</value>
</property>
client是调用ClientCach类的getClient方法得到,这个类是对Client的一个缓存。之后调用client.call(...)来远程调用改方法,
其中最重要的参数是实现了Writable接口的类Invocation的一个实例,client.call(...)方法如下所示
Connection是一个线程,用来进行socket连接和send(call)的,这里可以看到大师写的代码是严谨的,值得学习。在call.wait之后,
调用interrupt将线程中止。
sendParams会调用NetUtils类的connect方法去连接socket的输出流,建立的tcp连接是禁止Nagle算法的,也就是NO_DELAY,方法是
本文介绍Java中代理模式的应用及实现原理,通过分析Job类中的Invoker代码,揭示了如何利用InvocationHandler接口完成远程过程调用(RPC)。讨论了客户端缓存、Socket连接以及线程管理等关键技术。
740





