使用jconsole连接ipv6 JMX服务URL

3

我在使用jconsole连接IPv6地址的JMX服务URL时遇到了问题。我尝试了以下方法:

service:jmx:rmi:///jndi/rmi://[fd02:c9e3:a6c0:4306:0:0:0:27]:5500/jmx  

我得到了:

无法连接到...

一些背景信息:

  • 我从我的Windows 7电脑上运行jconsole,并连接到Linux上的jmx服务器。
  • jmx服务器是一个双栈Redhat Linux服务器,我可以使用IPv4地址通过jconsole连接。
  • 不确定这是否相关,我尝试连接的主机有两个网络接口,其中一个仅用于管理目的。

你好,请问一下,你在客户端是否已经设置了身份验证,或者在服务器上是否已将其禁用? - Pace
你的应用程序实际上是否在IPv6套接字上监听JMX连接? - Heiko Rupp
你检查了基本连接吗?首先尝试从命令提示符中ping fd02:c9e3:a6c0:4306:0:0:0:27,然后再telnet fd02:c9e3:a6c0:4306:0:0:0:27 5500,看看端口是否打开(如果没有,你会收到“连接被拒绝”的消息)。如果Telnet未安装,则可以通过“控制面板>程序和功能>打开或关闭Windows功能>Telnet客户端”进行安装。 - mpontillo
@Heiko/Mike 感谢你们的建议。我发现我的服务器进程需要使用“[]”来转义JMX URL中的“:”。 - javadeveloper
@sfrocks:你能发一下你所做的例子吗?据我回忆,你可以回答自己的帖子 - 我感觉这可能对其他人有帮助。 - Heiko Rupp
1个回答

1

好的,我添加了以下条件将服务器主机地址用方括号括起来。

    if ( aHost instanceof Inet4Address ) {
       this.hostAddress = aHost.getHostAddress();
    }
    else if ( aHost instanceof Inet6Address ) {
       this.hostAddress = "[" + aHost.getHostAddress() + "]";
    }
    else {
       throw someException();
    }

.............some other stuff.................

    registry = LocateRegistry.getRegistry( this.hostAddress, ... );

实际上,主机地址在属性文件中被指定为名称值对。因此,我本可以像下面这样做,但由于其他原因它没有起作用。
.properties 文件
hostName = [fd02:c9e3:a6c0:4306:0:0:0:27]

这实际上是错误的:根据RFC2732,URL中需要'[]',它们不是主机名的一部分。 - ankon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接