考虑这个设置:
所以有一个 JMX 服务器,我们希望不同的 JMX 客户端可以访问它,但问题是这些不同的 JMX 客户端通过不同的名称/地址知道 HostX。为了便于举例说明,我们假设 HostA 通过 hostx
名称了解 HostX,但 HostB 通过 hostxshadow
名称了解 HostX。
我正在寻找有关如何在以下情况下解决此问题的建议:
我可以控制 JMX 客户端和 JMX 服务器的源代码。
我无法控制源代码,即我可以在 JVM 上设置系统属性,但仅此而已。
要解决的基本问题是,在 RMI 世界中,服务器端决定客户端应如何连接(对吗?)。所以设置例如java.rmi.server.hostname
在 HostX 上没有帮助。在我看来,我只能使 HostA 快乐或 HostB 快乐,但不能同时使两者快乐。
结论真的是任何 RMI 服务器只有在所有客户端都使用相同的名称访问它时才能工作吗?
最佳答案
你的结论是正确的。这是 RMI 的设计缺陷。有一个基本假设,即存在一个“最公开”的主机名或 IP 地址,每个人都可以通过它来联系服务器主机。
您关于主机在 stub 中嵌入自己的名称或地址的陈述也是正确的。
关于java - JMX/RMI,其中服务器没有全局唯一的网络名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21580565/