Cum setați timeout-ul de solicitare pentru conectorul JMX (Programare, Java, Jmx)

sasankad a intrebat.

Încerc să setez request timeout pentru JMX Connector, dar se pare că nu funcționează.

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

Dar, din moment ce nu a funcționat, am căutat pe Google pentru a vedea motivul și am aflat că în api la distanță JMX standard nu acceptă variabila de mediu de mai sus.

Există vreo altă modalitate de a seta time-out-ul de solicitare?

Comentarii

  • Ați putea adăuga timeout-ul la conexiunea JMX la creare, de exemplu JMXConnector jmxc = connectWithTimeout(jmxServiceURL, 30, TimeUnit.SECONDS); –  > Por Sean F.
  • @SeanF, Da, am parcurs și eu acel blog, dar cerința mea este să setez timeout-ul de solicitare, nu timeout-ul conexiunii. Mă întrebam dacă conectorul JMXMP are această capacitate. –  > Por sasankad.
  • oh ok, îmi pare rău că nu vă pot ajuta acolo. –  > Por Sean F.
2 răspunsuri
bartosz.r

Dacă utilizați protocolul JMX implicit – RMI – atunci cea mai bună opțiune pentru timeout-ul de pe partea clientului este timeout-ul global al conexiunii RMI. Desigur, va funcționa numai dacă nu aveți nevoie să utilizați conexiuni RMI care trebuie să fie deschise pentru totdeauna.

Iată un exemplu de proprietate pentru timeout-uri (preluat din documentația Oracle RMI: http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/sunrmiproperties.html):

-Dsun.rmi.transport.tcp.responseTimeout=60000

Am testat-o și chiar funcționează. În documentația Oracle există, de asemenea, alte câteva proprietăți utile pentru partea de client și server a comunicării.

Comentarii

  • Dacă vorbim despre ceva de genul unui test junit, ați putea, de asemenea, să faceți acest lucru în mod programatic înainte de a porni jmx, de exemplu, într-o metodă @BeforeClass: System.setProperty(„sun.rmi.transport.tcp.responseTimeout”, „60000”).  > Por fuzzyBSc.
Deepak Sharma

u poate încerca aceste coduri pentru a seta timeout-ul conectorului 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);
          }

Comentarii

  • Aceasta este soluția pe care am adaptat-o și eu. Dar am uitat să-mi actualizez răspunsul. Așa că voi accepta acest răspuns. –  > Por sasankad.
  • Bine, dar acest lucru nu provoacă de fapt conexiunile suspendate să se termine. Doar face ca firul de execuție să nu mai aștepte conexiunea și să presupună eșecul. Într-un mediu cu trafic ridicat, conexiunile lăsate în urmă în acest mod vor înghiți rapid lucrurile. –  > Por Mihai Danila.

Tags:,