我正在尝试为 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);
}