如何为 JMX 连接器设置请求超时
我正在尝试为JMX连接器设置请求超时,但似乎不起作用。
env.put("jmx.remote.x.request.waiting.timeout", new Long(30000));
但是由于它不起作用,我用谷歌搜索了原因,发现在标准JMX远程API中不支持上述环境变量。
有没有其他方法可以设置请求超时?
我正在尝试为JMX连接器设置请求超时,但似乎不起作用。
env.put("jmx.remote.x.request.waiting.timeout", new Long(30000));
但是由于它不起作用,我用谷歌搜索了原因,发现在标准JMX远程API中不支持上述环境变量。
有没有其他方法可以设置请求超时?
如果使用缺省 JMX 协议 ( RMI - 则客户端超时的最佳选项是全局 RMI 连接超时。当然,只有当您不需要使用必须永远打开的RMI连接时,它才会起作用。
下面是超时的示例属性(取自 Oracle RMI 文档:http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/sunrmiproperties.html):
-Dsun.rmi.transport.tcp.responseTimeout=60000
我已经测试过了,它真的有效。在 oracle 文档中,对于通信的客户端和服务器端,也很少有其他有用的属性。
您可以尝试以下代码来设置 JMX 连接器超时:
JMXConnector connectWithTimeout(JMXServiceURL url, long timeout, TimeUnit unit) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<JMXConnector> future = executor.submit(new Callable<JMXConnector>() {
public JMXConnector call() {
return JMXConnectorFactory.connect(url);
}
});
return future.get(timeout, unit);
}