2010-04-05 87 views
35

在Java中設計分佈式應用程序時,似乎有一些技術可解決相同類型的問題。我簡要閱讀了關於Java Remote Method InvocationJava Message Service,但很難真正看出差異。 Java RMI似乎比JMS更緊密地耦合,因爲JMS使用異步通信,但除此之外我沒有看到任何大的差異。Java RMI和JMS有什麼區別?

  • 他們之間有什麼區別?
  • 其中一個比另一個新?
  • 哪一種在企業中比較普遍/受歡迎?
  • 他們對彼此有什麼優勢?
  • 什麼時候比其他人更喜歡?
  • 他們在實施困難方面有很大差異嗎?

我也認爲Web服務CORBA地址同樣的問題。

+0

這些聽起來像面試問題,因爲它看起來似乎將兩個聽起來相似的術語混爲一談,但對於任何理解它們的人應該認爲它們有很大的不同。 – 2010-05-08 21:02:07

+0

他們不'處理同樣的問題'。 – EJP 2014-09-08 21:41:25

回答

30

你不能真正比較兩個蘋果和橘子。

RMI是遠程過程調用(RPC)的一種形式。這是一個輕量級的,Java特定的API,希望調用者和接收者在通信時可用。

JMS是一個可靠的消息傳遞API。 JMS提供者存在於各種消息傳遞系統中。即使其中一方不可用,如果提供者實現了該消息,也可以傳遞消息。我熟悉的兩個是TIBCO和IBM MQ。

RMI不處理有保證的交付或異步響應,JMS可能會根據提供程序進行處理。

從可用性的角度來看,JMS允許鬆耦合。 「Web服務」允許在協議和數據的意義上鬆散耦合,但沒有詳細說明可靠消息傳遞的方式,儘管一些實現包含了這個(Windows Communication Foundation),有些則不包含此功能。

編輯:修改了每條評論。當我在2010年編寫這個答案時,我的經驗實際上只有一個JMS提供者,而我實際上並不知道沒有默認的JMS提供者。

+0

JMS a既不是可靠的消息傳遞子系統,也不是MQSeries的替代品。它是一個消息* API *,可以與* MQSeries交談,以及許多其他消息傳遞系統。 – EJP 2014-09-08 21:38:57

+0

@mrjoltcola:嗨你可以請看看http://stackoverflow.com/questions/29683209/differences-between-jms-and-corba – 2015-04-16 20:10:08

39

你已經知道方法調用。如果要調用該方法的對象位於不同的計算機上,該怎麼辦?您使用RMI將呼叫從一臺計算機(客戶端)發送到另一臺(服務器)。客戶端將等待(或「阻止」),直到結果從服務器返回。這稱爲同步操作。

JMS不同:它允許一臺計算機向另一臺計算機發送消息,如電子郵件。第一個人不必等待迴應:它可以繼續做任何想要的工作。甚至可能沒有迴應。這兩個計算機系統不一定完全按步驟工作,所以這稱爲異步

思考差異的另一種方式:RMI就像撥打電話,JMS就像發送短信一樣。

RMI比JMS稍舊,但這並不真正相關。這兩個概念比java早得多。

複雜性沒有太大差別。我認爲你應該嘗試對每一個做一個教程。 RMIJMS

如果你從頭開始一個項目,並且你不確定使用哪一個項目,那麼同步/異步問題可能是最好的決定因素。如果您正在研究現有系統,最好不要引入太多新技術。所以如果他們已經在使用它,那麼我建議最好堅持使用它。

8

遠程方法調用(RMI): 1.Java的本地RPC接口 2.遠程對象可以用類似的語義來運行本地對象 3.默認實現使用專用二進制通信協議,但RMI可通過SOAP實現

Java消息系統(JMS) 1.Java的接口和規範,消息中間件數據 2.Packets可以運到消息隊列和在那裏他們將在異步操作的主題。的隊列或主題不必是遠程 3.JMS服務器可以使用RMI,SOAP等

-1
  • RMI用於彼此而不是JMS用於鬆耦合之間通信緊密耦合的應用程序。
  • RMI用於異步(實時聊天),但JMS同時使用(離線聊天)。

  • 在RMI,主要是你對象序列化,但在JMS可能你不 需要它

Here is the more detail about the above terminologies

現在什麼是RMI和JMS鬆散&緊密耦合的意思?

消息傳遞使鬆散耦合的分佈式通信成爲可能。組件將消息發送到目標,並且收件人可以從目標中檢索消息。但是,爲了進行通信,發送者和接收者不必同時可用。實際上,發件人不需要知道關於接收方的任何信息;接收者也不需要知道發送者的任何信息。發送者和接收者只需要知道什麼消息格式和使用什麼目的地。在這方面,消息傳遞不同於緊密耦合的技術,例如遠程方法調用(RMI),它需要應用程序知道遠程應用程序的方法。

+0

RMI不用於'異步(實時)聊天'。 RMI是一項同步技術。它是異步的JMS。 – EJP 2014-09-08 21:40:36

+0

你應該改正答案。 – 2017-10-18 04:07:40