大型應(yīng)用通常會(huì)拆分為多個(gè)系統(tǒng)來實(shí)現(xiàn),對(duì)于Java來說,這些子系統(tǒng)可能部署在同一臺(tái)機(jī)器的多個(gè)不同的JVM中,也可能部署在不同的機(jī)器上,但這些子系統(tǒng)又不是完全獨(dú)立的,而且要相互通信來實(shí)現(xiàn)共同的業(yè)務(wù)功能,對(duì)于此類應(yīng)用,我們稱之為分布式Java應(yīng)用。
有兩種方式可實(shí)現(xiàn)系統(tǒng)間的通信,1是:基于消息方式實(shí)現(xiàn)系統(tǒng)間的通信,2是:基于遠(yuǎn)程調(diào)用方式實(shí)現(xiàn)系統(tǒng)間的通信。
一、基于消息方式 系統(tǒng)之間要通信是,就向外發(fā)送信息,消息可以是字節(jié)流、字節(jié)數(shù)組、甚至是Java對(duì)象(經(jīng)序列化的對(duì)象),其它系統(tǒng)接收到消息后則進(jìn)行相應(yīng)的業(yè)務(wù)邏輯。
消息方式的系統(tǒng)間通信,通常是基于網(wǎng)絡(luò)協(xié)議來實(shí)現(xiàn)的,常用的通信的協(xié)議:TCP/IP和UDP/IP。
簡(jiǎn)要說明TCP、UDP的區(qū)別,TCP:可靠的,需先建立連接,保證數(shù)據(jù)到達(dá)的順序,性能低一些;UDP:不可靠,無(wú)需先建立連接,不保證數(shù)據(jù)傳輸?shù)目煽啃裕赡軙?huì)出現(xiàn)數(shù)據(jù)丟失或數(shù)據(jù)亂序的現(xiàn)象,性能高于一些。
TCP/IP和UDP/IP用于完成數(shù)據(jù)的傳輸,但要完成系統(tǒng)間的通信,還需對(duì)數(shù)據(jù)進(jìn)行處理,例如IO操作??砂袸O分為同步IO和異步IO,其中同步IO最常用的是BIO和NIO,異步IO包括AIO,均基于事件驅(qū)動(dòng)思想-------(對(duì)于網(wǎng)路IO,事件有三種:連接建立、流讀取、流寫入)。
-------
基于Java自身技術(shù)實(shí)現(xiàn)消息方式的系統(tǒng)間通信有如下四種,TCP/IP+BIO,TCP/IP+NIO,
UDP/IP+BIO,UDP/NIO.
基于開源框架實(shí)現(xiàn)信息方式的系統(tǒng)間通信,如Mina框架,基于Java NIO構(gòu)建,同時(shí)支持TCP/IP,UDP/IP.
二、基于遠(yuǎn)程調(diào)用方式 系統(tǒng)之間要通信時(shí),可通過調(diào)用本地的一個(gè)Java接口的方法,透明地調(diào)用遠(yuǎn)程的Java實(shí)現(xiàn)。具體的細(xì)節(jié)由Java或框架完成,這種方式在Java中主要用來實(shí)現(xiàn)基于RMI、WebService的應(yīng)用。
遠(yuǎn)程調(diào)用,就是盡可能地使系統(tǒng)之間的通信和系統(tǒng)內(nèi)一樣,讓使用者感覺到調(diào)用遠(yuǎn)程同調(diào)用本地一樣,
-------
基于Java自身技術(shù)實(shí)現(xiàn)遠(yuǎn)程調(diào)用方式的系統(tǒng)間通信,技術(shù)主要有RMI(輕量級(jí))和WebService兩種。
基于開源框架實(shí)現(xiàn)遠(yuǎn)程調(diào)用方式的系統(tǒng)間通信,如Spring RMI--實(shí)現(xiàn)RMI、CXF--實(shí)現(xiàn)WebService。
總結(jié):本文只是簡(jiǎn)單的講解了Jaba中實(shí)現(xiàn)系統(tǒng)間的相關(guān)技術(shù)、基本原理及使用方法,本文并未提到Java中可用來實(shí)現(xiàn)系統(tǒng)間通信的技術(shù),如JMS、EJB等。
##本文摘自《分布式Java應(yīng)用基礎(chǔ)與實(shí)踐》林昊 著。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。