簡體   English   中英

沒有服務器的全局唯一網絡名稱的JMX / RMI

[英]JMX/RMI where there's no globally unique network name for server

考慮以下設置: 具有多個客戶端的JMX服務器

因此,有一個JMX服務器,我們希望可以從不同的JMX客戶端訪問它,但是問題是這些不同的JMX客戶端通過不同的名稱/地址知道HostX。 對於這個例子的目的可以說主機A知道主機X用的名字hostx ,但主機B的名稱知道主機X hostxshadow

我正在尋找有關在以下情況下如何解決此問題的建議:

  1. 在這里,我可以控制JMX客戶端和JMX服務器的源代碼。

  2. 在我無法控制源代碼的地方,即可以在JVM上設置系統屬性,僅此而已。

要解決的基本問題是,在RMI世界中,服務器端決定客戶端應如何連接(對嗎?)。 因此,在HostX上設置java.rmi.server.hostname不會有幫助。 如我所見,我只能使HostA高興或HostB高興,但不能同時使兩者高興。

是否真的得出結論:任何RMI服務器都只能在所有客戶端都使用相同名稱訪問它的情況下才能工作?

您的結論是正確的。 這是RMI中的設計缺陷。 有一個基本的假設,即每個人都可以通過一個“最公開的”主機名或IP地址來聯系服務器主機。

您關於主機在存根中嵌入其自己的名稱或地址的聲明也是正確的。

RMI是JMX的一種可能的傳輸方式。 另一個解決方案是JMXMP,切換到它非常簡單,請訪問http://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/http://blog.markfeeney.com/2010 /10/jmx-through-ssh-tunnel.html

要解決的基本問題是,在RMI世界中,服務器端決定客戶端應如何連接(對嗎?)。 因此,在HostX上設置java.rmi.server.hostname不會有幫助。 如我所見,我只能使HostA高興或HostB高興,但不能同時使兩者高興。

這對您沒有幫助,但對其他人而言,訣竅是將java.rmi.server.hostname系統屬性設置為一個名稱,該名稱意味着HostA在防火牆內部,而HostB在防火牆之外。

例如,在EC2區域中,我們將hostname屬性設置為EC2節點的“公共主機名”,這是通過執行以下操作獲得的:

wget -q -O - http://169.254.169.254/latest/meta-data/public-hostname

解析為:

ec2-54-1-2-3.compute-1.amazonaws.com

在包裝盒本身以及EC2內部的任何其他產品上,此54.1.2.3確定為10.1.2.3而在外部世界上,則確定為面向外部的IP 54.1.2.3 Amazon默認情況下會執行此DNS。 您可能需要根據需要調整/etc/hosts文件,以使名稱正確。

有關EC2和JMX的更多詳細信息,請參閱: 如何使用JMX連接到在EC2上運行的Java實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM