JGroups - Википедия - JGroups

JGroups
Разработчики)Бела Бан
Стабильный выпуск
4.1.3.Финал / 16 августа 2019 г. (2019-08-16)
Написано вЯва
Операционная системаКроссплатформенность
Размер2,1 МБ
Типнадежный многоадресная передача система
ЛицензияЛицензия Apache 2.0
Интернет сайтhttp://www.jgroups.org/

JGroups это библиотека для надежного общения один-к-одному или один-ко-многим, написанная на Ява язык.

Его можно использовать для создания групп процессов, участники которых отправляют сообщения друг другу. JGroups позволяет разработчикам создавать надежные многоточечные (многоадресные) приложения, где надежность является проблемой развертывания. JGroups также освобождает разработчика приложений от самостоятельной реализации этой логики. Это значительно экономит время разработки и позволяет развертывать приложение в различных средах без изменения кода.

Функции

  • Создание и удаление группы. Члены группы могут быть распределены по LAN или WAN.
  • Вступление и выход из групп
  • Обнаружение членства и уведомление о присоединившихся / оставленных / аварийных участниках
  • Обнаружение и удаление разбившихся элементов
  • Отправка и получение сообщений от участника к группе (точка-многоточка)
  • Отправка и получение сообщений между участниками (точка-точка)

Пример кода

Этот код ниже показывает, как можно написать простое чат-приложение с использованием JGroups:

общественный учебный класс Чат расширяет Ресивер Адаптер {    JChannel канал;    общественный пустота viewAccepted(Вид new_view) {        Система.из.println("** Посмотреть: " + new_view);    }    общественный пустота получить(Сообщение сообщение) {        Система.из.printf("от% s:% s  n", сообщение.getSource(), сообщение.getObject());    }    частный пустота Начните(Нить реквизит, Нить имя) бросает Исключение {        канал = новый JChannel(реквизит).Имя набора(имя)            .setReceiver(это).соединять("ChatCluster");        eventLoop();        канал.Закрыть();    }    частный пустота eventLoop() {        BufferedReader в = новый BufferedReader(новый InputStreamReader(Система.в));        пока (истинный) {            пытаться {                Система.из.Распечатать("> "); Система.из.румянец();                Нить линия = в.readLine().toLowerCase();                Сообщение сообщение = новый Сообщение(ноль, линия);                канал.Отправить(сообщение);            }            ловить(Исключение е) {            }        }    }    общественный статический пустота главный(Нить[] аргументы) бросает Исключение {        Нить реквизит = "udp.xml";        Нить имя = ноль;        за (int я=0; я < аргументы.длина; я++) {            если (аргументы[я].равно("-реквизит")) {                реквизит = аргументы[++я];                Продолжить;            }            если (аргументы[я].равно("-имя")) {                имя = аргументы[++я];                Продолжить;            }            Система.из.println("Chat [-props XML config] [-name name]");            возвращаться;        }        новый Чат().Начните(реквизит, имя);    }}

В start () JChannel создается из конфигурации XML (например, udp.xml). Канал - это конечная точка для присоединения к кластеру.

Далее устанавливается Receiver, что означает, что будут вызваны 2 обратных вызова:

  • viewAccepted (View v) всякий раз, когда присоединяется новый участник или существующий участник покидает кластер
  • получить (сообщение сообщение), когда получено сообщение от какого-либо другого члена кластера

Затем канал присоединяется к кластеру «ChatCluster». С этого момента сообщения можно отправлять и получать, плюс новое представление (включая этого члена) будет установлено во всех членах кластера (включая вновь присоединившегося члена).

Все, что вводится в основном цикле, приводит к созданию сообщения, которое отправляется всем членам кластера, включая отправителя.

Экземпляры приложения чата можно запускать в одном процессе, на одном компьютере, на разных хостах в локальной сети, на хостах в разных сетях или в облаке. Код остается прежним; единственное, что нужно изменить, это конфигурацию.

Например, в локальной сети может использоваться многоадресная рассылка IP. Когда многоадресная рассылка IP отключена, TCP может использоваться как транспорт. При запуске в облаке будет использоваться TCP плюс протокол обнаружения облака и так далее ...

Гибкий стек протоколов

Самая мощная особенность JGroups - это гибкий стек протоколов, который позволяет разработчикам адаптировать его для точного соответствия требованиям приложений и характеристикам сети. Преимущество этого в том, что вы платите только за то, что используете. Смешивая и согласовывая протоколы, можно удовлетворить различные требования приложений. JGroups поставляется с рядом протоколов (но каждый может написать свой собственный), например

  • Транспортные протоколы: UDP (IP Multicast ), TCP
  • Фрагментация больших сообщений
  • Протоколы обнаружения для обнаружения начального членства присоединяющегося узла
  • Надежная одноадресная и многоадресная передача сообщений. Утерянные сообщения передаются повторно
  • Обнаружение сбоев: разбитые члены исключаются из членства
  • Протоколы заказа: Fifo, Total Order (на основе секвенсора или токена)
  • Членство и уведомление о присоединившихся или потерпевших крах участников
  • Обнаружение и объединение сетевого раздела (разделенного мозга)
  • Управление потоком
  • Шифрование и аутентификация (включая поддержку SASL)
  • Сжатие

Строительные блоки

Строительные блоки - это классы, расположенные по каналам JGroups, которые обеспечивают абстракции более высокого уровня, такие как

  • RPC для отдельных или всех узлов кластера
  • Распределенные кеши
  • Распределенные блокировки
  • Распределенные атомные счетчики
  • Распределенное выполнение задачи

внешняя ссылка