如何为 JMX 连接器设置请求超时

2022-09-03 15:23:55

我正在尝试为JMX连接器设置请求超时,但似乎不起作用。

env.put("jmx.remote.x.request.waiting.timeout", new Long(30000));

但是由于它不起作用,我用谷歌搜索了原因,发现在标准JMX远程API中不支持上述环境变量。

有没有其他方法可以设置请求超时?


答案 1

如果使用缺省 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 文档中,对于通信的客户端和服务器端,也很少有其他有用的属性。


答案 2

您可以尝试以下代码来设置 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);
          }

推荐