天天看點

Hadoop2源碼分析-RPC探索實戰1.概述2.Java NIO簡述3.Java NIO執行個體示範4.動态代理和反射簡述5.動态代理和反射執行個體示範6.Hadoop V2 RPC架構使用執行個體7.總結8.結束語

java nio簡述

java nio執行個體示範

動态代理與反射簡述

動态代理與反射執行個體示範

hadoop v2 rpc架構使用執行個體

  下面開始今天的部落格介紹。

  java nio又稱java new io,它替代了java io api,提供了與标準io不同的io工作方式。java nio由一下核心元件組成:

channels:連接配接通道,即能從通道讀取資料,又能寫資料到通道。可以異步讀寫,讀寫從buffer開始。

buffers:消息緩沖區,用于和nio通道進行互動。所謂緩沖區,它是一塊可以讀寫的記憶體,該記憶體被封裝成nio的buffer對象,并提供相應的方法,以便于通路。

selectors:通道管理器,它能檢測到java nio中多個通道,單獨的線程可以管理多個通道,間接的管理多個網絡連接配接。

  下圖為java nio的工作原理圖,如下圖所示:

Hadoop2源碼分析-RPC探索實戰1.概述2.Java NIO簡述3.Java NIO執行個體示範4.動态代理和反射簡述5.動态代理和反射執行個體示範6.Hadoop V2 RPC架構使用執行個體7.總結8.結束語

nioserver

  首先,我們來看nioserver的代碼塊。代碼内容如下所示:

nioclient

  然後,我們在來看nioclient的代碼塊,代碼具體内容如下所示:

configureapi

  下面給出configureapi類的代碼,内容如下所示:

  在java中,動态代理主要用來做方法的增強,可以在不修改源碼的情況下,增強一些方法。另外,還有一個作用就是做遠端調用,比如現在有java接口,該接口的實作部署在非本地伺服器上,在編寫用戶端代碼時,由于沒法直接生成該對象,這個時候就需要考慮使用動态代理了。

  而反射,利用了class類作為反射執行個體化對象的基本應用,對于一個執行個體化對象而言,它需要調用類中的構造方法,屬性和一般方法,這些操作都可以通過反射機制來完成。下面我們用一個執行個體來了解這些理論。

jproxy

jreflect

  本執行個體主要示範通過hadoop v2的rpc架構實作一個計算兩個整數的add和sub,服務接口為 caculateservice ,繼承于 versionedprotocol ,具體代碼如下所示:

caculateservice

  注意,本工程使用的是hadoop-2.6.0版本,這裡caculateservice接口需要加入注解,來聲明版本号。

  caculateserviceimpl類實作caculateservice接口。代碼如下所示:

caculateserviceimpl

  caculateserver服務類,對外提供服務,具體代碼如下所示:

caculateserver

  注意,在hadoop v2版本中,擷取rpc下的server對象不能在使用rpc.getserver()方法了,該方法已被移除,取而代之的是使用builder方法來建構新的server對象。

  rpcclient用戶端類,用于通路server端,具體代碼實作如下所示:

rpcclient

  hadoop v2 rpc服務端截圖預覽,如下所示:

Hadoop2源碼分析-RPC探索實戰1.概述2.Java NIO簡述3.Java NIO執行個體示範4.動态代理和反射簡述5.動态代理和反射執行個體示範6.Hadoop V2 RPC架構使用執行個體7.總結8.結束語

  hadoop v2 rpc用戶端截圖預覽,如下所示:

Hadoop2源碼分析-RPC探索實戰1.概述2.Java NIO簡述3.Java NIO執行個體示範4.動态代理和反射簡述5.動态代理和反射執行個體示範6.Hadoop V2 RPC架構使用執行個體7.總結8.結束語

  這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行讨論或發送郵件給我,我會盡我所能為您解答,與君共勉!