2011-05-30 51 views
2

我正在使用JMX-RMI代理進行消息傳遞。我有一個Java程序,它向一組偵聽器/偵聽器發送一個名稱/ ID的消息。根據偵聽器接收到的消息,客戶端程序會相應地執行相應的操作。此作品運行良好,但我想知道是什麼類型容錯功能被內置到JMX RMI代理中。JMX RMI代理容錯機制

如果監聽程序意外停止,JMX是否重新啓動它或在某處記錄錯誤,如果兩邊的消息隊列已滿,該怎麼辦?任何解釋JMX RMI底層體系結構或內置容錯機制的文檔都將受到讚賞。如果它沒有任何容錯機制,那麼做一個好的方法是什麼。

感謝很多

回答

2

我假設你的客戶端偵聽器使用標準javax.management.remote中連接器。沒有一些定製,我會說你可以實現一些簡單的故障檢測。對於容錯您可能正在尋找某種集羣解決方案。

有連通的兩層你需要予以關注:

  1. MBeanServerConnection中本身。換句話說,如果整個服務器端JVM終止,您的客戶端進程需要知道。
  2. 儘管服務器JVM和附屬MBeanServerConnection可能會繼續可用,但「託管」,監聽器/客戶端消息轉發器服務本身可能會停止/失敗/停止。

對於#1中,客戶端進程使用addConnectionNotificationListener方法可以註冊與所述一個JMXConnectorNotificationListener。您的本地連接將在以下所有事件中發出JMXConnectionNotification s:

  • 新的客戶端連接已打開。
  • 客戶端連接已關閉。
  • 客戶端連接意外失敗。
  • 客戶端連接可能會丟失通知。此通知僅出現在客戶端。

這樣,你的客戶就會知道什麼時候連接到服務器已經建立並丟失了。

#2,它是多一點特定於應用程序,但也許你能適應一個簡單的模式是這樣的:

當你的聽衆/代理服務啓動時,發出啓動通知。當它停止時,發出停止通知。將註冊這些通知的兩類聽衆將是:

  1. 客戶端,讓他們知道服務已啓動/停止。
  2. 服務器端「監視器」可以監聽「停止」並重新啓動服務。

這是或多或少你在想什麼?

+0

感謝您的回覆,我也一直在思考,感謝所有與NotificationListener相關的建議。 – user265536 2011-06-01 18:43:25