Tôi đang cố gắng hiểu URL dịch vụ JMX.
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
Sẽ thật tuyệt nếu ai đó có thể giúp tôi hiểu điều này.
Cảm ơn
Câu trả lời:
Tôi sẽ sử dụng lại câu trả lời mà tôi đã viết trước đó cho câu hỏi này: Không thể kết nối với MBeanServer của Tomcat qua jconsole trong Java6
Nó không hoàn chỉnh, nhưng có thể giúp:
Giả sử bạn có Máy chủ JMX (bí danh 'JMX Agent' bí danh 'JVM mà bạn muốn kết nối với') đang chạy trên 'TARGET MACHINE' với cổng đăng ký RMI tại 'RMI REGISTRY PORT' và cổng máy chủ JMX RMI tại 'JMX RMI CỔNG MÁY CHỦ'.
Ghi chú:
jmxrmi
.URI sau sẽ dẫn đến kết nối thành công (đã thử nghiệm)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Điều này trông khó chịu. Hãy cắt nó ra.
URI này là RFC2609 "URL giao thức vị trí dịch vụ" (tốt, nó thực sự là một URI, phải không?)
Nó bao gồm:
service
- một hằng số jmx:rmi
- loại dịch vụ bao gồm: loại trừu tượng jmx
và lược đồ URL rmi
nhựa cây bị phân hủy thành:
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
- ipsite/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- Phần URLMột ứng dụng khách JMX có đầy đủ thông tin kết nối với "ipsite" để thực hiện trao đổi JMX qua RMI; nhưng cái gì của máy khách JMX không BIẾT cổng đó? Kiên nhẫn...
Phần URL được phân tách thành:
/jndi/
- Điều này dường như nói với ứng dụng khách JMX rằng nó có thể nhận được thông tin tra cứu tại vị trí tiếp theormi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- Đúng, chúng tôi nhận được thông tin về Máy chủ RMI JMX tại sổ đăng ký RMI, trong khóa tra cứu jmxrmi
Điều này hơi giống xe ngựa trước, vì người ta phải liên hệ với sổ đăng ký RMI được cung cấp bởi phần sau của URL SLP trước.
Sau khi vò đầu bứt tai, bằng trực giác, hãy thử:
service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Vâng, điều đó hoạt động! Cổng máy chủ JMX RMI được lấy từ sổ đăng ký. Theo suy nghĩ thứ hai, máy đích cũng nên được lấy từ sổ đăng ký, do đó:
service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Thậm chí tốt hơn, điều đó cũng hoạt động!
Người giới thiệu:
Giải thích:
service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
service:jmx:rmi://192.168.30.10:1234
- nói rằng có JMX Agent trên máy có địa chỉ IP 192.168.30.10. Tác nhân JMX đang sử dụng (TCP) cổng 1234 để cung cấp (các) dịch vụ JMX qua RMI (về cơ bản hoạt động như một máy chủ RMI)./jndi/rmi://192.168.30.10:2344/jmxrmi
- nói rằng sơ khai RMI để tương tác với JMX Agent qua RMI có thể được tìm thấy trong sổ đăng ký RMI đang chạy trên máy có địa chỉ IP 192.168.30.10 và đang sử dụng (TCP) cổng 2344. Để có được sơ khai RMI, bạn cần phải tra cứu ràng buộc "jmxrmi".Các câu trả lời trước đây gợi ý rằng phần thứ hai của URL là để lấy cổng máy chủ của máy chủ JMX RMI. Đó là không đúng. Cổng máy chủ JMX RMI là (TCP) 1234 và là một phần của URL. Những gì bạn nhận được từ sổ đăng ký RMI là RMI sơ khai ( javax.management.remote.rmi.RMIServerImpl_Stub
) mà bạn có thể sử dụng để nói chuyện với JMX Agent (MBean Server) qua RMI.
Hi vọng điêu nay co ich.
192.168.30.10:1234
trong ví dụ này) hoạt động như thế nào không? tức là, các URL bắt đầu bằng service:jmx:rmi:///jndi/rmi:
. Một phần lý do khiến điều này rất khó hiểu nói chung là khi chúng ta chỉ định một cổng jmx trong khi khởi động JVM, nó không tham chiếu đến RMI ở bất kỳ đâu : -Dcom.sun.management.jmxremote.port=2344
. (Lưu ý rằng theo kinh nghiệm của tôi rằng cổng jmxremote được liên kết với phần "Đăng ký RMI" của URL, không phải phần "Máy chủ JMX RMI".)
service:jmx:rmi://192.168.30.10:1234
. Ngoài ra, bạn có thể sử dụng com.sun.management.—
thuộc tính. Sử dụng một URL chẳng hạn như service:jmx:rmi:///…
để Java chọn IP và cổng cho bạn (ngẫu nhiên hoặc dựa trên thuộc tính hệ thống). Sử dụng một URL chẳng hạn như service:jmx:rmi://0.0.0.0:1234
để liên kết cổng 1234 trên tất cả các giao diện. Và như thế. Hi vọng điêu nay co ich.
Theo javax.management.remote.rmi
url này được tập hợp như thế này
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname