什么是rmi,為什么使用

一、背景介紹

RMI是Java的一組擁護(hù)開發(fā)分布式應(yīng)用程序的API。RMI使用Java語(yǔ)言接口定義了遠(yuǎn)程對(duì)象,它集合了Java序列化和Java遠(yuǎn)程方法協(xié)議(Java Remote Method Protocol)。

Java遠(yuǎn)程方法協(xié)議(英語(yǔ):Java Remote Method Protocol,JRMP)是特定于Java技術(shù)的、用于查找和引用遠(yuǎn)程對(duì)象的協(xié)議。這是運(yùn)行在Java遠(yuǎn)程方法調(diào)用(RMI)之下、TCP/IP之上的線路層協(xié)議

RMI技術(shù)早在JDK1.1中就出現(xiàn)了,并且在JDK1.5版本做了重大改進(jìn),使得我們可以更加簡(jiǎn)單的使用RMI技術(shù)來(lái)支持分布式應(yīng)用。關(guān)于詳細(xì)的技術(shù)變更歷史,可以參見官方的 Java RMI release Note。

通過RMI技術(shù),本地虛擬機(jī)JVM可以調(diào)用存在于另外一個(gè)JVM中的對(duì)象方法,就好像該虛擬機(jī)調(diào)用存在于本地JVM的某個(gè)對(duì)象方法一樣。而另外一個(gè)JVM可以與本地JVM在同一臺(tái)物理機(jī),也可以屬于不同的物理機(jī)。

常見的可以實(shí)現(xiàn)遠(yuǎn)程調(diào)用的技術(shù)還包括了 RPC,CORBA,Web Service,這里不一一介紹,需要了解的同學(xué)可以 google,以下只關(guān)注 RMI 這個(gè)只針對(duì) Java 語(yǔ)言的遠(yuǎn)程調(diào)用技術(shù)的一些闡述。

二、知識(shí)剖析

( 1 ) RMI 注冊(cè)表(參見 LocateRegistry 類)

*為了使得客戶端能夠查找到服務(wù)端對(duì)外提供的遠(yuǎn)程對(duì)象,RMI需要維護(hù)一個(gè)RMI注冊(cè)表,該注冊(cè)表維護(hù)了對(duì)于客戶端而言的遠(yuǎn)程對(duì)象位置,對(duì)外提供了服務(wù),服務(wù)端需要將要外提供服務(wù)的對(duì)象的代理綁定到RMI注冊(cè)表中。

*RMI注冊(cè)表可以跟服務(wù)端不在一臺(tái)主機(jī)上。

*RMI注冊(cè)表的啟動(dòng)有兩種方式:一種是通過命令行 rmiregistry $port 在命令行啟動(dòng);另外一種是通過 LocateRegistry 類的 createRegistry(int port) 方法啟動(dòng)。

(2)

客戶端查找遠(yuǎn)程對(duì)象,服務(wù)端注冊(cè)遠(yuǎn)程對(duì)象的多樣性

也許在網(wǎng)上查看各種RMI示例代碼時(shí)我們常常發(fā)現(xiàn)客戶端查找遠(yuǎn)程對(duì)象,服務(wù)端注冊(cè)遠(yuǎn)程對(duì)象使用的代碼都不盡相同,我在學(xué)習(xí)過程中見到的有三種途徑:

LocateRegistry 類的對(duì)象的 rebind() 和 lookup() 來(lái)實(shí)現(xiàn)綁定注冊(cè)和查找遠(yuǎn)程對(duì)象的

利用命名服務(wù) java.rmi.Naming 類的 rebind() 和 lookup() 來(lái)實(shí)現(xiàn)綁定注冊(cè)和查找遠(yuǎn)程對(duì)象的

( 3 )

利用JNDI(Java Naming and Directory Interface,Java命名和目錄接口) java.naming.InitialContext 類來(lái) rebind() 和 lookup() 來(lái)實(shí)現(xiàn)綁定注冊(cè)和查找遠(yuǎn)程對(duì)象的

三、

Spring RMI一開始看網(wǎng)上的資料感覺很簡(jiǎn)單,但一次一次的失敗告訴我,那不簡(jiǎn)單

提問與回答

笑然:rmi?服務(wù)端不指定端口?怎么樣

答:不指定會(huì)使用默認(rèn)的1099

程遠(yuǎn):rmi?怎么在service做負(fù)載均衡

答:配置權(quán)

明達(dá):可以通過spring對(duì)rmi更加簡(jiǎn)化么。

可以將rmi的xml文件集成到spring里面

IT修真院

“我們相信人人都可以成為一個(gè)工程師,現(xiàn)在開始,找個(gè)師兄,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷茫”。

這里是技能樹.IT修真院,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化,成長(zhǎng)可見化,師兄1對(duì)1免費(fèi)指導(dǎo)??靵?lái)與我一起學(xué)習(xí)吧 !

師兄帶你入門!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java 面試題 整理自??途W(wǎng) 什么是Java虛擬機(jī)?為什么Java被稱作是“平臺(tái)無(wú)關(guān)的編程語(yǔ)言”? Java虛擬...
    GuaKin_Huang閱讀 10,760評(píng)論 19 265
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,894評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評(píng)論 19 139
  • Java是一個(gè)支持并發(fā)、基于類和面向?qū)ο蟮挠?jì)算機(jī)編程語(yǔ)言。下面列出了面向?qū)ο筌浖_發(fā)的優(yōu)點(diǎn): 代碼開發(fā)模塊化,更易...
    安安靜靜寫代碼閱讀 1,148評(píng)論 0 8
  • 上班一年多,越來(lái)越迷茫,生活過得一團(tuán)糟,不知道該如何整理自己,就這樣,每天都不開心嗎,昨天過生日,這么多年來(lái)最孤單...
    琳Moi閱讀 141評(píng)論 0 0

友情鏈接更多精彩內(nèi)容