Posted on 2009-06-05 19:08
林光炎 閱讀(356)
評(píng)論(0) 編輯 收藏 所屬分類:
J2EE
Java programmer講到RPC(Romote Procedure Call), 多半會(huì)想到 RMI,
用RMI, 可以讓我們很容易的呼叫遠(yuǎn)端的 mothod.
但是, RMI 有一些缺點(diǎn), 其中每一個(gè)method都要 throw RemoteException, 不過最近我都用Spring framework, 他已經(jīng)讓我們處理掉了這個(gè)麻煩...
另外一個(gè)RMI的缺點(diǎn), 也就市本篇文章的重點(diǎn), 就是method的呼叫者與被呼叫者的關(guān)係太緊密了,
也就是說, client必須指定我所要呼叫的server是在網(wǎng)路的哪一個(gè)位址...
JMS,則提供了一個(gè)方式,讓client (producer)送出message, 但不指定誰來收這一個(gè)message,
這種 loosely coupling 的方式, 讓我們的程式更有彈性, 但是用JMS來做RPC還是有一些麻煩的地方
* procedure送出的是message而不是 呼叫method
* 基本上 JMS是 asynchronous, 也就是說 proceudre送出message後, message還沒被處理, procedure就繼續(xù)執(zhí)行下去.這與我們一般RMI 的用法不一樣.
然而Lingo 幫我們解決了這兩個(gè)問題, 透過Lingo, 我們可以讓client直接呼叫server的method (而不是發(fā)送message, 在server這端 也不用去接受message), 但是並不指定是哪一個(gè)server幫我們處理這一個(gè)method call. 這對(duì)multiple server和load-balance很有幫助.
Lingo的範(fàn)例, 可以看下面這個(gè)網(wǎng)址, 相當(dāng)簡(jiǎn)單明瞭
http://lingo.codehaus.org/Example
附帶一提的是, lingo不但可以用 synchronous呼叫method, 另外也可以用synchronous呼叫method.
好用吧.....
參考資料 : http://lingo.codehaus.org/Home