Я предполагаю, что ваши слушатели на стороне клиента используют стандартные javax.management.remote разъемы. Без некоторой настройки я бы сказал, что вы можете реализовать простое обнаружение ошибок . Для Fault Tolerance вы, вероятно, ищете какое-то решение для кластеризации.
Существует два уровня подключения, о которых вам нужно беспокоиться:
- Сам MBeanServerConnection. Другими словами, если вся JVM на стороне сервера завершается, процессы на стороне клиента должны знать.
- Хотя серверная JVM и вспомогательная MBeanServerConnection могут продолжать оставаться доступными, «размещенные», сама служба пересылки сообщений слушателя / клиента может останавливаться / терпеть неудачу / останавливаться.
Для # 1 клиентские процессы могут зарегистрировать NotificationListener с JMXConnector , используя метод addConnectionNotificationListener . Затем ваше локальное соединение будет отправлять JMXConnectionNotification s на все следующие события:
- Открыто новое клиентское соединение.
- Клиентское соединение было закрыто.
- Клиентское соединение неожиданно оборвалось.
- Клиентское соединение потенциально потеряло уведомления. Это уведомление появляется только на стороне клиента.
Таким образом, ваши клиенты будут знать, когда соединение с сервером было установлено и потеряно.
Для # 2 это немного более специфично для вашего приложения, но, возможно, вы можете адаптировать простой шаблон, подобный этому:
Когда ваша служба прослушивателя / пересылки запускается, отправьте уведомление о запуске. Когда он останавливается, выдают остановленное уведомление. Две категории слушателей, которые будут регистрироваться для этих уведомлений, будут:
- Клиенты, которые знают, что служба запущена / остановлена.
- Серверный "наблюдатель", который может прослушивать "остановку" и перезапускать службу.
Это более или менее то, о чем вы думали?