在分布式服務框架中。最基礎的問題就是遠程服務是怎么通訊的。首先來看看計算機系統網絡通信的基本原理。網絡通信須要做的就是將流從一台計算機傳輸到另外一台計算 機,基於傳輸協議和網絡IO來實現。當中傳輸協議有 tcp、udp等等,tcp、udp都是在基於Socket概念上為某類應用場景而擴展出的傳輸協議。網絡IO。主要有bio、 nio、aio三種方式,全部的分布式應用通訊都基於這個原理而實現,僅僅是為了應用的易用。各種語言通常都會提供一些更為貼近應用易用的應用層協議。在java領域中知名的有:RMI、XML-RPC、Binary-RPC、SOAP、CORBA、JMS等。
在Java領域中有非常多可實現遠程通訊的技術。比如:RMI、MINA、ESB、 Burlap、Hessian、SOAP、EJB和JMS 等,這些技術都是在協議基礎上實現的。那么我們主要討論一下各個協議。
RMI
RMI是個典型的為java定制的遠程通信協議, 我們都知道,在single vm中,我們能夠通過直接調用java object instance來實現通信,那么在遠程通信時,假設也能依照這樣的方式當然是最好了。這樣的遠程通信的機制成為RPC(RemoteProcedure Call),RMI正是朝着這個目標而誕生的。
傳輸的標准格式是Java Object Stream;基於Java串行化機制將請求的Java Object信息轉化為流。傳輸協議是Socket。
XML-RPC
XML-RPC也是一種和RMI類似的遠程調用的協議,它和RMI的不同之處在於它以標准的xml格式來定義請求的信息(請求的對象、方法、參數 等),這種優點是在跨語言通訊的時候也能夠使用。所以RMI與RPC的差別之中的一個是RPC是跨語言的。
傳輸的標准格式是XML。將XML轉化為流。傳輸協議是HTTP。
Binary-RPC
Binary-RPC和XML-RPC是差點兒相同,不同之處僅在於傳輸的標准格式由XML轉為了二進制的格式。
傳輸的標准格式是二進制文件。將二進制文件轉化為傳輸的流。傳輸協議是HTTP。
SOAP
SOAP(SimpleObject Access Protocol),是一個用於分布式環境的、輕量級的、基於XML進行信息交換的通信協議,能夠覺得SOAP是XML RPC的高級版。兩者的原理全然同樣。都是http+XML,不同的僅在於兩者定義的XML規范不同。SOAP也是Webservice採用的服務調用協 議標准。
CORBA
Common Object Request BrokerArchitecture(公用對象請求代理[調度]程序體系結構),是一組用來定義“分布式對象系統”的標准,由OMG(Object Menagement Group)作為發起和標准制定單位。CORBA的目的是定義一套協議,符合這個協議的對象能夠互相交互,不論它們是用什么樣的語言寫的。不論它們執行於 什么樣的機器和操作系統。CORBA是個類似於SOA的體系架構。涵蓋可選的遠程通信協議,但其本身不能列入通信協議。
JMS
JMS。是實現java領域遠程通信的一種手段和方法。基於JMS實現遠程通信時和RPC是不同的。盡管能夠做到RPC的效果,但由於不是從協議 級別定義的。因此我們不覺得JMS是個RPC協議,但它確實是個遠程通信協議,在其它的語言體系中也存在着類似JMS的東西,能夠統一的將這類機制稱為消 息機制。而消息機制呢,一般是高並發、分布式領域推薦的一種通信機制,這里的主要一個問題是容錯。JMS注重的是消息交換,RMI注重的是對象方法調用,所以目的不同。JMS大多時候是異步的松耦合,RMI大多時候是同步的緊耦合。
JMS規定的傳輸格式是Message,將參數信息放入Message中,傳輸協議不限。基於JMS也是經常使用的實現遠程異步調用的方法之中的一個。