Я пытаюсь понять URL-адрес службы JMX.
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
Было бы здорово, если бы кто-нибудь помог мне в этом разобраться.
благодаря
Ответы:
Я повторно воспользуюсь ответом, который я написал ранее для этого вопроса: не удается подключиться к Tomcat MBeanServer через jconsole в Java6
Это не все, но может помочь:
Предположим, у вас есть сервер JMX (псевдоним «JMX Agent» псевдоним «JVM, к которому вы хотите подключиться»), запущенный на «ЦЕЛЕВОЙ МАШИНА» с портом реестра RMI в «RMI REGISTRY PORT» и портом сервера JMX RMI в «JMX RMI ПОРТ СЕРВЕРА'.
Заметка:
jmxrmi
.Следующий 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
сок разлагается на:
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
- ипсайт/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- часть URLХорошо информированный клиент JMX подключается к "ipsite" для обмена JMX-over-RMI; но как насчет клиента JMX, который не ЗНАЕТ этот порт? Терпение...
Часть 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
Более того, это тоже работает!
Рекомендации:
Объяснять:
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 Agent. Агент 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) через RMI.
Надеюсь это поможет.
192.168.30.10:1234
в этом примере)? то есть URL-адреса, которые начинаются с service:jmx:rmi:///jndi/rmi:
. Одной из причин этого является настолько запутанной в целом в том , что , когда мы задаем JMX порт при запуске виртуальной машины Java, он не ссылается на RMI в любом месте: -Dcom.sun.management.jmxremote.port=2344
. (Обратите внимание, что, по моему опыту, порт jmxremote связан с частью URL-адреса «Реестр RMI», а не с частью «Сервер JMX RMI».)
service:jmx:rmi://192.168.30.10:1234
. В качестве альтернативы вы можете использовать com.sun.management.—
свойства. Используйте URL-адрес, например, service:jmx:rmi:///…
чтобы Java могла выбрать IP-адрес и порт за вас (случайным образом или на основе свойств системы). Используйте URL-адрес, например, service:jmx:rmi://0.0.0.0:1234
для привязки порта 1234 ко всем интерфейсам. И так далее. Надеюсь это поможет.
Согласно javax.management.remote.rmi
этот URL собран так
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname