Я намагаюся зрозуміти URL-адресу служби JMX.
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
Було б чудово, якби хтось допоміг мені це зрозуміти.
Дякую
Відповіді:
Я повторно використаю відповідь, яку я написав раніше на це запитання: Не вдається підключитися до MBeanServer Tomcat через jconsole в Java6
Це не повністю, але може допомогти:
Припустимо, у вас є сервер JMX (псевдонім 'JMX Agent' псевдонім 'JVM, до якого ви хочете підключитися'), який працює на 'TARGET MACHINE' з портом реєстру 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>
- ipsite/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
- говорить, що на машині є агент JMX з IP-адресою 192.168.30.10. Агент 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".Попередні відповіді свідчать про те, що 2-а частина 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