簡體   English   中英

如何通過JMS執行JMX?

[英]How to do JMX over JMS?

我需要增強分布式Java應用程序的JMX接口。 選擇JMX的原因是公開數據的簡單性。 這些分布式應用程序存在於連接到JMS服務器(activemq 5.7)(又連接到另一個JMS服務器以橋接2個網絡,也就是activemq 5.7)的幾台不同的計算機中。

我想做的是能夠從JMS網絡上的任何位置訪問各個服務器上的遠程JMX接口。 我將擁有完整的JMX訪問權限,就像通過常規RMI界面進行訪問一樣。 這意味着每種動作。

我知道我可以使用lingo來使遠程jmx接口與JMS服務器通信,並且從那里我的網橋應該允許我訪問它們(假設其配置正確)。

這是一個好方法嗎? 有人為此目的嘗試過術語嗎? 我可能還沒有找到其他選擇嗎?

計划B可能是使用apache駱駝RMI模塊,但似乎如果選擇了lingo,則即插即用的功能遠不止於此。

我認為這不是一個壞方法。 我想到的使用JMS的缺點之一就是對代理依賴 ,而代理是大多數JMS實現所依賴的。

另一方面,它確實提供了一些有趣的功能,例如發現,異步JMX調用和pub / sub多播樣式的JMX操作,您可以在其中發出一個操作請求並從所有MBeanServer接收回響應。

我不知道任何實際的實現,但是實現起來可能不太困難。 您只需要在每個目標JVM上配置一個客戶機即可:

  1. 偵聽JMX請求:偵聽器將解組該請求(應為MBeanServerConnection方法調用的編碼)。 將公共主題用於pub / sub樣式調用,將編組的結果返回到請求消息中JMSReplyTo屬性中指定的目標。 否則,您可以為每個JVM分配一個隊列,或者為每個JVM選擇一個唯一的標識符並使​​用消息選擇器。
  2. 如果要實現JMX通知,則需要實現一個代理NotificationListener ,該代理將注冊所需的通知並將其在接收到時轉發到指定的JMS目標。

您還可以考慮實現完全成熟的javax.management.remote實現,該實現可以借助標准遵循而更平滑地集成到您的環境中。

我發現OpenDMK項目對於擴展/實現JMX服務器和客戶端非常有用。 該庫提供了使用“自定義”協議實現標准JMX遠程處理解決方案的基本構建塊。 基本上,您實現一個javax.management.remote.generic.MessageConnection ,它用作傳輸和調用機制。 所有JMX調用,響應和回調都被序列化為javax.management.remote.message.Message的實例並且它們都是可序列化的,因此您將它們寫入JMS ObjectMessage或從中讀取它們應該沒有任何問題。

您將從這種方法中獲得的其他一些好處是:

  1. 只要正確配置了類路徑,就應該能夠使用任何標准的JMX工具(例如JConsole)連接到JVM。
  2. OpenDMK還提供了對MBeanServer進行聯合的功能,該功能使您的所有MBeanServer實例都出現並可以通過一個中央MBeanServer進行訪問。 此功能需要標准的JMX遠程實現。
  3. OpenDMK還實現了一種有趣的服務發現協議,它具有兩種不同的風格,包括原始多播和“電話回家”方法,可以與您的JMS協議很好地結合在一起。

如果您有興趣,我在這里發布了OpenDMK的項目。

我正在使用netty為Java代理實現基本的JMX客戶端,它可選地支持異步JMX請求。 響應是通過注冊的偵聽器傳遞的,就像“反向” MBeanServerConnection。 如果這很有用,請在此處查找源。

Jolokia(http://www.jolokia.org/)也是一個很棒的項目,用於使用REST和JSON遠程訪問JMX。 它會自動為您完成。 並支持批處理操作。 我建議看一看。

如果您使用JMX來獲取AMQ統計信息,那么它將提供一個插件,因此您可以使用JMS消息傳遞來獲取統計信息而不是JMX: http : //activemq.apache.org/statisticsplugin.html

從那時起,我將使用JMS來發現我感興趣的服務器的URL,並使用純JMX。 我沒有看到通過JMS發送每個RMI調用的好處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM