Функция JGroups для вывода списка доступных групп или кластеров
У меня есть ряд клиентов, которые общаются друг с другом с помощью библиотеки JGroups, они в основном создают канал связи, связанный с именем кластера:
communicationChannel = new JChannel(AutoDiscovery.class.getResource("/resource/udp.xml"));
communicationChannel.connect("cluster1");
Теперь я хотел бы, чтобы они сначала перечислили доступные кластеры для подключения и позволили пользователю решать, к какому кластеру подключаться, без указания имени кластера в коде, как указано выше. Очевидно, что API имеет getName(), которая возвращает логическое имя канала, если установлено, но нет способа извлечь настроенные кластеры.
Хотя я использую org.jgroups.Message.getHeaders() и читая заголовок, я получаю активные кластеры, но ничего. Любая помощь, пожалуйста?
1 ответ
Там нет никакого способа найти доступные в настоящее время кластеры, я предлагаю сохранить некоторое дополнительное состояние, которое хранит (в памяти) все имена кластеров и связанные с ними конфигурации.
Однако однажды вы можете разработать собственный протокол (вставить его под GMS), который выполняет следующие действия: - Перехватывает (Event evt): if evt.getType() == Event.CONNECT*** (4 события), захватите имя кластера ((String)evt.getArg()) и добавьте его в набор - Улавливает (Event evt): если evt.getType() == Event.DISCONNECT, захватите текущее имя кластера и удалите его из задавать
Это не дает вам информацию о конфигурации; Вы также можете получить это, если вы подклассы JChannel и перезаписали connectXXX() и disconnect ().