2016-04-06 23 views
0

我知道這是什麼repetead但無法找到解決我的問題......與Amazon EC2奇怪的RMI連接異常

我想實現一個模擬的分佈式系統,我掙扎了很多與連接通過RMI。

我有三個不同的組件,網格調度器,資源管理器和客戶端。他們三人互動。其行爲如下:用戶在註冊表中查找資源管理器引用,然後調用遠程方法,該方法將調用網格調度器中的另一個方法,並最終調用用戶中的一個方法來提供結果。如果我在本地執行整個系統,一切都按預期工作。

現在的事情是,我正試圖將其中一個資源管理器節點移動到公共地址爲A.A.A.A的EC2 Amazon實例,其餘系統將在公共地址爲B.B.B.B的筆記本電腦上本地運行。我允許安全組策略上的端口1099 TCP/UDP上的TCP流量,還設置java.security.policy以在兩臺機器中授予所有權限。要在每個組件創建註冊表我做的:

LocateRegistry.createRegistry(1099); 

隨後的部件將由

Naming.lookup(url) 

現在發現自己,用戶將查找的IP地址AAAA /組件亞馬遜實例的公共地址。我可以檢查它是否有時獲取引用,有時它不會(NotBoundException)。然而,當它確實得到的參考,並試圖調用我得到的方法:

java.rmi.ConnectException: Connection refused to host: INTERNAL IP OF AMAZON INSTANCE nested exception is: java.net.ConnectException: Connection timed out: connec. 

我做錯了什麼?我試圖設置屬性

java.rmi.server.hostname 

對於Amazon實例中的公共ip A.A.A.A,我得到了相同的結果。我也嘗試在我的筆記本上做同樣的公共地址BBBB,並且我得到了「連接拒絕IP BBBB不是本地主機地址」

我也在我的houe的路由器上打開端口,以防萬一這是問題,但它似乎並不是...

我錯過了什麼嗎?

在此先感謝。

+0

請參閱RMI FAQ項目A.1。 – EJP

回答

0

好的顯然,問題是即使服務器在端口1099上偵聽,那麼用於連接存根的端口也是隨機的,所以我必須打開AWS安全組中的所有TCP端口。這樣就可以工作,但即使我關閉了Windows防火牆並打開了路由器中的所有端口,它也不能用於我的筆記本電腦 - AWS,只是AWS中的不同實例。但是好了,我可以忍受......

關於主機,你必須將其設置爲通過

hostname -i 

返回的私有地址如果你打算部署它裏面AWS或公衆IP如果你連接不同的實例,如你的筆記本電腦和一個EC2。

我希望這可以幫助人們在相同的情況下(已經看到幾個問題,但同樣的問題,但沒有迴應)。

祝您有美好的一天!

+0

端口是隨機的,除非您在構建或導出時指定它,您應該這樣做,而不是打開所有端口。如果您在同一個JVM中構建Regustry,則可以使用端口1099處理所有事情,這是默認情況下會發生的情況,除非您使用套接字工廠。 – EJP