【问题标题】:JMX/RMI where there's no globally unique network name for serverJMX/RMI 服务器没有全局唯一网络名称
【发布时间】:2014-03-02 01:54:49
【问题描述】:

考虑以下设置:

所以有一个 JMX 服务器,我们希望它可以从不同的 JMX 客户端访问,但问题是这些不同的 JMX 客户端通过不同的名称/地址知道 HostX。举例来说,假设 HostA 通过名称 hostx 知道 HostX,但 HostB 通过名称知道 HostX hostxshadow

我正在寻找有关如何在以下情况下解决此问题的建议:

  1. 我可以控制 JMX 客户端和 JMX 服务器的源代码。

  2. 我无法控制源代码,即我可以在 JVM 上设置系统属性,但仅此而已。

要解决的基本问题是,在 RMI 世界中,服务器端决定客户端应该如何连接(对吗?)。所以设置例如HostX 上的java.rmi.server.hostname 无济于事。在我看来,我只能让 HostA 高兴或 HostB 高兴,但不能同时让两者高兴。

是否真的可以得出结论,任何 RMI 服务器只有在所有客户端都使用相同的名称来访问它时才能工作?

【问题讨论】:

  • 你能通过将同名解析为不同的IP来解决这个问题吗?那么 HostA 在查找 hostx 时获取的是内部 IP,而 HostB 获取的是影子 IP?
  • 我无法控制部署 JMX 解决方案的环境。

标签: java rmi jmx


【解决方案1】:

你的结论是正确的。这是 RMI 的设计缺陷。有一个基本假设,即每个人都可以通过它联系服务器主机。

您关于主机在存根中嵌入自己的名称或地址的说法也是正确的。

【讨论】:

  • 感谢您的验证。即使我暗中希望我错了,验证我的假设对我来说也很有价值。 :-) 我会接受这个答案。
  • 如果你能找到 java-RMI 邮件列表存档,它在十年或更长时间前就在那里讨论过了。有一个解决方案,但首先它需要对 RMI 进行更改(我当时建议这样做),其次它需要 Sun/Oracle 接受问题的存在,你会从交易所看到那永远不会发生。
  • 大声笑。关于不需要更改 RMI 本身的解决方法,我刚刚找到了this。我认为这很聪明。仅适用于上述场景 1,并且有很多警告......但聪明的想法。
【解决方案2】:

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 连接器的官方状态是什么?它们是否同样好用、快速、稳定?如果我有问题怎么办? rmi 似乎有很多知识(仍然),但是 jmxmp 呢?但确实,从谷歌搜索来看,人们似乎对 jmxmp 有积极的体验。
【解决方案3】:

要解决的基本问题是,在 RMI 世界中,服务器端决定客户端应该如何连接(对吗?)。所以设置例如HostX 上的 java.rmi.server.hostname 不会有帮助。在我看来,我只能让 HostA 高兴或 HostB 高兴,但不能同时让两者高兴。

这对您没有帮助,但对其他人而言,诀窍是将java.rmi.server.hostname 系统属性设置为一个名称,该名称意味着在防火墙内部的 HostA 上的某些东西,但在外部的 HostB 上意味着另一个东西。

例如,在 EC2 领域,我们将主机名属性设置为 EC2 节点的“公共主机名”,我们通过以下操作获得:

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

这被解析为:

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

在盒子本身和 EC2 内部的任何其他设备上,它解析为 10.1.2.3,而在外部世界上,它解析为面向外部的 IP 54.1.2.3。 Amazon 默认情况下会使用此 DNS。您可能需要根据需要调整 /etc/hosts 文件以使名称正确。

有关 EC2 和 JMX 的更多详细信息,请参阅:How to connect to Java instances running on EC2 using JMX

【讨论】:

  • Gray,我已经在我的原始帖子中提到了java.rmi.server.hostname,以及为什么它没有帮助。不过谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 2021-09-26
  • 2017-06-10
  • 2016-09-08
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多