Próbuję zrozumieć adres URL usługi JMX.
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
Byłoby wspaniale, gdyby ktoś mógł mi pomóc to zrozumieć.
Dzięki
Odpowiedzi:
Ponownie wykorzystam odpowiedź, którą napisałem wcześniej na to pytanie: Nie można połączyć się z serwerem MBeanServer Tomcata przez jconsole w Javie6
Nie jest kompletna, ale może pomóc:
Załóżmy, że masz serwer JMX (alias 'Agent JMX' alias 'JVM, z którym chcesz się połączyć') działający na 'MASZYNIE DOCELOWEJ' z portem rejestru RMI w 'PORT REJESTRACYJNY RMI ' i portem serwera JMX RMI w 'JMX RMI PORT SERWERA'.
Uwaga:
jmxrmi
.Poniższy identyfikator URI doprowadzi do pomyślnego połączenia (przetestowane)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
To wygląda paskudnie. Odetnijmy to.
Ten identyfikator URI to adres URL protokołu lokalizacji usługi RFC2609 (cóż, to naprawdę identyfikator URI, prawda?)
Jest to złożone z:
service
- stała jmx:rmi
- typ usługi złożony z: typu abstrakcyjnego jmx
i schematu URL rmi
sok rozkłada się na:
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
- ipsite/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- część adresu URLDobrze poinformowany klient JMX łączy się z „ipsite” w celu wymiany JMX-over-RMI; ale co z klientem JMX, który nie ZNA tego portu? Cierpliwość...
Część adresu URL jest dekomponowana na:
/jndi/
- Wydaje się, że mówi to klientowi JMX, że może uzyskać informacje wyszukiwania w następującej lokalizacjirmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- Tak, otrzymujemy informacje o JMX RMI Server w rejestrze RMI pod kluczem wyszukiwania jmxrmi
To jest coś w rodzaju wózka przed koniem, ponieważ najpierw należy skontaktować się z rejestrem RMI podanym w drugiej części adresu URL SLP.
Po drapaniu głowy intuicyjnie spróbujmy:
service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Tak, to działa! Port serwera JMX RMI jest ładnie uzyskany z rejestru. Po zastanowieniu komputer docelowy powinien również zostać uzyskany z rejestru, a zatem:
service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Nawet lepiej, to też działa!
Bibliografia:
Wytłumaczyć:
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
service:jmx:rmi://192.168.30.10:1234
- mówi, że na maszynie jest agent JMX o adresie IP 192.168.30.10. Agent JMX używa portu (TCP) 1234 do świadczenia usług JMX przez RMI (działa w zasadzie jako serwer RMI)./jndi/rmi://192.168.30.10:2344/jmxrmi
- mówi, że kod RMI do interakcji z agentem JMX przez RMI można znaleźć w rejestrze RMI, który działa na komputerze z adresem IP 192.168.30.10 i korzysta z portu (TCP) 2344. Aby uzyskać kod pośredniczący RMI, musisz wyszukaj powiązanie "jmxrmi".Poprzednie odpowiedzi sugerują, że druga część adresu URL służy do uzyskania portu serwera serwera JMX RMI. To nie jest poprawne. Port serwera JMX RMI to (TCP) 1234 i jest częścią adresu URL. To, co otrzymujesz z rejestru RMI, to funkcja RMI stub ( javax.management.remote.rmi.RMIServerImpl_Stub
), której możesz użyć do komunikacji z agentem JMX (serwerem MBean) przez RMI.
Mam nadzieję że to pomoże.
192.168.30.10:1234
w tym przykładzie)? tj. adresy URL zaczynające się od service:jmx:rmi:///jndi/rmi:
. Jednym z powodów jest to tak skomplikowane w ogóle jest, że kiedy określenie portu JMX podczas uruchamiania JVM, nie odwoływać RMI wszędzie: -Dcom.sun.management.jmxremote.port=2344
. (Zauważ, że z mojego doświadczenia wynika, że port jmxremote jest powiązany z częścią „RMI Registry” adresu URL, a nie z częścią „JMX RMI Server”).
service:jmx:rmi://192.168.30.10:1234
. Alternatywnie możesz użyć com.sun.management.—
właściwości. Użyj adresu URL, service:jmx:rmi:///…
aby pozwolić Javie wybrać dla Ciebie adres IP i port (losowo lub na podstawie właściwości systemu). Użyj adresu URL, na przykład, service:jmx:rmi://0.0.0.0:1234
aby powiązać port 1234 na wszystkich interfejsach. I tak dalej. Mam nadzieję że to pomoże.
Według javax.management.remote.rmi
ten adres URL jest składany w ten sposób
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname