Jump to content

JГруппы

JГруппы
Разработчик(и) Бела Бан
Стабильный релиз(ы)
5.х 5.3.9.Финал / 12 июля 2024 г .; 24 дня назад ( 12.07.2024 ) [1]
4.х 4.2.28.Финал / 10 апреля 2024 г .; 3 месяца назад ( 10.04.2024 ) [1]
Репозиторий github /белабан /JГруппы
Написано в Ява
Операционная система Кросс-платформенный
Размер 2,1 МБ
Тип надежная многоадресная система
Лицензия Лицензия Апач 2.0
Веб-сайт www .jgroups .org

JGroups — это библиотека для надежного взаимодействия «один к одному» или «один ко многим», написанная на языке Java .

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

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

Пример кода

[ редактировать ]

Этот код ниже демонстрирует реализацию простого IRC - клиента командной строки с использованием JGroups:

public class Chat extends ReceiverAdapter {
    private JChannel channel;

    public Chat(String props, String name) {
        channel = new JChannel(props)
            .setName(name)
            .setReceiver(this)
            .connect("ChatCluster");
    }

    public void viewAccepted(View view) {
        System.out.printf("** view: %s\n", view);
    }

    public void receive(Message msg) {
        System.out.printf("from %s: %s\n", msg.getSource(), msg.getObject());
    }

    private void send(String line) {
        try {
            channel.send(new Message(null, line));
        } catch (Exception e) {}
    }

    public void run() throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            System.out.print("> ");
            System.out.flush();
            send(in.readLine().toLowerCase());
        }
    }

    public void end() throws Exception {
        channel.close();
    }

    public static void start(Chat client) throws Exception {
        try {
            client.run();
        } catch (Exception e) {
        } finally {
            client.end();
        }
    }

    public static void main(String[] args) throws Exception {
        String props = "udp.xml";
        String name;

        for (int i = 0; i < args.length; i++) {
            if (args[i].equals("-props")) {
                props = args[++i];
                continue;
            }

            if (args[i].equals("-name")) {
                name = args[++i];
                continue;
            }

            System.out.println("Chat [-props XML config] [-name name]");
            return;
        }

        start(new Chat(props, name));
    }
}

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

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

  • viewAccepted(View view) когда к кластеру присоединяется новый участник или существующий участник покидает кластер
  • receive(Message msg) когда получено сообщение от какого-либо другого члена кластера

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

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

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

  • RPC к отдельным или всем узлам кластера
  • Распределенные кэши
  • Распределенные блокировки
  • Распределенные атомные счетчики
  • Распределенное выполнение задач
  1. ^ Перейти обратно: а б «Релизы · belaban/JGroups» . github.com . Проверено 31 июля 2024 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3a5c99220fab3abe2e829bd6ef18a2a7__1722418800
URL1:https://arc.ask3.ru/arc/aa/3a/a7/3a5c99220fab3abe2e829bd6ef18a2a7.html
Заголовок, (Title) документа по адресу, URL1:
JGroups - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)