Механизмы отказоустойчивости агента JMX RMI - PullRequest
3 голосов
/ 30 мая 2011

Я использую агент JMX-RMI для передачи сообщений. У меня есть Java-программа, которая отправляет сообщение с именем / идентификатором для набора слушателей / слушателей. Основываясь на сообщении, полученном слушателями, программы на стороне клиента ведут себя соответственно. Эта часть работает хорошо, но я хотел бы знать, какой Отказоустойчивость встроена в агент RMI JMX.

Если прослушиватель останавливается случайно, JMX перезапускает его или регистрирует ошибку где-нибудь, что, если очередь сообщений с обеих сторон заполнена. Мы будем благодарны за любую документацию, которая объясняет базовую архитектуру JMX RMI или встроенный механизм отказоустойчивости. Если у него нет механизмов отказоустойчивости, как бы это было хорошо.

Большое спасибо

1 Ответ

2 голосов
/ 31 мая 2011

Я предполагаю, что ваши слушатели на стороне клиента используют стандартные javax.management.remote разъемы. Без некоторой настройки я бы сказал, что вы можете реализовать простое обнаружение ошибок . Для Fault Tolerance вы, вероятно, ищете какое-то решение для кластеризации.

Существует два уровня подключения, о которых вам нужно беспокоиться:

  1. Сам MBeanServerConnection. Другими словами, если вся JVM на стороне сервера завершается, процессы на стороне клиента должны знать.
  2. Хотя серверная JVM и вспомогательная MBeanServerConnection могут продолжать оставаться доступными, «размещенные», сама служба пересылки сообщений слушателя / клиента может останавливаться / терпеть неудачу / останавливаться.

Для # 1 клиентские процессы могут зарегистрировать NotificationListener с JMXConnector , используя метод addConnectionNotificationListener . Затем ваше локальное соединение будет отправлять JMXConnectionNotification s на все следующие события:

  • Открыто новое клиентское соединение.
  • Клиентское соединение было закрыто.
  • Клиентское соединение неожиданно оборвалось.
  • Клиентское соединение потенциально потеряло уведомления. Это уведомление появляется только на стороне клиента.

Таким образом, ваши клиенты будут знать, когда соединение с сервером было установлено и потеряно.

Для # 2 это немного более специфично для вашего приложения, но, возможно, вы можете адаптировать простой шаблон, подобный этому:

Когда ваша служба прослушивателя / пересылки запускается, отправьте уведомление о запуске. Когда он останавливается, выдают остановленное уведомление. Две категории слушателей, которые будут регистрироваться для этих уведомлений, будут:

  1. Клиенты, которые знают, что служба запущена / остановлена.
  2. Серверный "наблюдатель", который может прослушивать "остановку" и перезапускать службу.

Это более или менее то, о чем вы думали?

...