Объясните URL JMX - PullRequest
       7

Объясните URL JMX

66 голосов
/ 04 мая 2010

Я пытаюсь понять URL-адрес службы JMX.

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi

Было бы здорово, если бы кто-нибудь помог мне понять это.

Спасибо

Ответы [ 3 ]

97 голосов
/ 18 августа 2011

Я буду повторно использовать ответ, который я написал ранее для этого вопроса: Не удается подключиться к MBeanServer Tomcat через jconsole в Java6

Это не завершено, но может помочь:

Предположим, у вас есть JMX-сервер (псевдоним «JMX-агент», псевдоним «JVM, к которому вы хотите подключиться»), работающий на «TARGET MACHINE» с портом реестра RMI в «RMI REGISTRY PORT» и порт сервера JMX RMI в 'ПОРТ СЕРВЕРА JMX RMI'.

Примечание:

  1. Реестр RMI сообщает клиентам JMX, где найти порт сервера JMX RMI ; информацию можно получить по ключу jmxrmi.
  2. Порт реестра RMI общеизвестен, так как он задается через системные свойства при запуске JVM.
  3. Порт JMX RMI-сервера обычно , а не , известный как JVM, выбирает его произвольно (если другие меры предосторожности не предпринимаются).

Следующий URI приведет к успешному соединению (проверено)

service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

Это выглядит противно. Давайте разделим это на части.

Этот URI является RFC2609 "URL-адрес протокола расположения службы" (ну, это действительно URI, верно?)

Он состоит из:

  • service - постоянная
  • jmx:rmi - тип услуги , состоящий из: абстрактный тип jmx и схема URL rmi
  • остальное - сок (спецификация протокола доступа к сервису)

сок раскладывается на:

* * 1068 //<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT> - ipsite /jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi - часть URL

Хорошо информированный клиент JMX подключается к «ipsite» для обмена JMX-over-RMI; но что из клиента JMX, который не ЗНАЕТ тот порт? Patience ...

Часть URL раскладывается на:

  • /jndi/ - Похоже, это говорит клиенту JMX, что он может получить информацию о поиске в расположении, следующем за
  • rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi - Да, мы получаем информацию о JMX RMI Server в реестре RMI, под ключом поиска jmxrmi

Это несколько «корзина перед лошадью», так как сначала нужно связаться с реестром RMI , заданным последним частью URL SLP.

Интуитивно почесав голову, попробуем:

service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

Да, это работает! Порт сервера JMX RMI хорошо получен из реестра. Если подумать, целевая машина также должна быть получена из реестра, таким образом:

service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

Еще лучше, это тоже работает!

Ссылки:

  1. http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
  2. http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
  3. http://mx4j.sourceforge.net/docs/ch03s04.html
  4. http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
  5. http://www.rfc -editor.org / гк / rfc2609.txt
5 голосов
/ 18 августа 2016

Объяснить:

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
  1. service:jmx:rmi://192.168.30.10:1234 - говорит о том, что на машине есть агент JMX с IP-адресом 192.168.30.10. Агент JMX использует (TCP) порт 1234 для предоставления услуг JMX через RMI (в основном действует как сервер RMI).
  2. /jndi/rmi://192.168.30.10:2344/jmxrmi - говорит, что заглушка RMI для взаимодействия с агентом JMX через RMI находится в реестре RMI, работающем на компьютере с IP-адресом 192.168.30.10 и использующем (TCP) порт 2344. Чтобы получить заглушка RMI, вам нужно найти привязку "jmxrmi".

В предыдущих ответах предполагается, что вторая часть URL-адреса предназначена для получения порта сервера RMI-сервера JMX. Это не правильно. Порт сервера JMX RMI (TCP) 1234 и является частью URL. Из реестра RMI вы получаете заглушку RMI (javax.management.remote.rmi.RMIServerImpl_Stub), которую можно использовать для связи с агентом JMX (MBean Server) через RMI.

Надеюсь, это поможет.

4 голосов
/ 04 мая 2010

Согласно javax.management.remote.rmi

этот URL-адрес собран следующим образом

service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
...