Объясните URL JMX

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

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

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

Спасибо

Ответ 1

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

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

Предположим, что у вас есть JMX-сервер (псевдоним "JMX Agent" псевдоним "JVM, который вы хотите подключиться к" ), запущенный на "TARGET MACHINE" с портом реестра RMI в "RMI REGISTRY PORT" и портом сервера JMX RMI на "JMX RMI SERVER PORT".

Примечание:

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

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

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

Это выглядит противно. Разрежьте его.

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

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

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

sap разлагается на:

  • //<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 в реестре 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

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

Литература:

Ответ 2

Объяснить:

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

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

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

Ответ 3

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

этот url собран таким образом

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