Как установить тайм-аут запроса для JMX-коннектора
Я пытаюсь установить тайм-аут запроса для JMX Connector, но похоже, что он не работает.
env.put("jmx.remote.x.request.waiting.timeout", new Long(30000));
Но так как это не сработало, я googled, чтобы увидеть причину, и выяснил, что в стандартном 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
u может попробовать эти коды, чтобы установить тайм-аут разъема 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);
}