Wednesday, November 15, 2006

Lingo, 讓JMS來做RPC.

Java programmer講到RPC(Romote Procedure Call), 多半會想到 RMI,
用RMI, 可以讓我們很容易的呼叫遠端的 mothod.

但是, RMI 有一些缺點, 其中每一個method都要 throw RemoteException, 不過最近我都用Spring framework, 他已經讓我們處理掉了這個麻煩...

另外一個RMI的缺點, 也就市本篇文章的重點, 就是method的呼叫者與被呼叫者的關係太緊密了,
也就是說, client必須指定我所要呼叫的server是在網路的哪一個位址...


JMS,則提供了一個方式,讓client (producer)送出message, 但不指定誰來收這一個message,
這種 loosely coupling 的方式, 讓我們的程式更有彈性, 但是用JMS來做RPC還是有一些麻煩的地方
  • procedure送出的是message而不是 呼叫method
  • 基本上 JMS是 asynchronous, 也就是說 proceudre送出message後, message還沒被處理, procedure就繼續執行下去.這與我們一般RMI 的用法不一樣.

然而Lingo 幫我們解決了這兩個問題, 透過Lingo, 我們可以讓client直接呼叫server的method (而不是發送message, 在server這端 也不用去接受message), 但是並不指定是哪一個server幫我們處理這一個method call. 這對multiple server和load-balance很有幫助.

Lingo的範例, 可以看下面這個網址, 相當簡單明瞭

http://lingo.codehaus.org/Example

附帶一提的是, lingo不但可以用 synchronous呼叫method, 另外也可以用synchronous呼叫method.

好用吧.....

參考資料 : http://lingo.codehaus.org/Home

0 Comments:

Post a Comment

<< Home