1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/willbeahero-iRpc

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

iRpc

Введение

iRpc — это легковесная высокопроизводительная RPC-фреймворк, основанный на Nio-коммуникации. Он поддерживает одноузловую и leader-follower-развёртывание, прост в настройке и эффективен в коммуникации.

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

Класс запуска ServerStarter

  • Конструктор | Конструктор | Назначение | | --- | --- | | ServerStarter() | По умолчанию загружает файл конфигурации с именем «application.yml» из каталога resources. | | ServerStarter(String pathName) | Указывает имя файла конфигурации yml, формат — xxx.yml. | | ServerStarter(IRpcServerProperty property) | Конфигурирует информацию о сервере через javaBean. |

  • Информация о конфигурации сервера yml | Параметр | Значение | | --- | --- | | iRpcServer | Информация о конфигурации iRpc-сервера. | | serverPort | Порт прослушивания сервера. | | heartbeat | Период проверки состояния соединения клиента сервером (в настоящее время не используется). | | nodeName | Имя текущего узла сервера, значение ClusterNode — n0. | | ClusterNode | Информация об узле в режиме leader-flower, если используется один узел, то этот параметр не требуется. Узлы в режиме кластера имеют одинаковую информацию об узлах ClusterNode. | | node | Имя узла (рекомендуется использовать: n0-nx, используется модель dleger), | | ip | IP-адрес узла iRpcServer (или домен). | | port | Порт службы узла iRpcServer. |

  • Шаблон конфигурации yml

## iRpc 服务端配置信息
iRpcServer:
  serverPort: 10916
  heartbeat: 60 # iRpc 服务器端检测 iRpc 客户端连接状态的最大心跳周期。
  nodeName: n0
  ClusterNode: # 如果使用单机,则不配置该项, node 从 n1 开始,n0 属于 localhost
    - node: n0
      ip: 127.0.0.1
      port: 10916
    - node: n1
      ip: 127.0.0.1
      port: 10917
    - node: n2
      ip: 127.0.0.1
      port: 10918

Класс запуска ClientStarter

  • Конструктор | Конструктор | Назначение | | --- | --- | | ClientStarter() | По умолчанию загружает файл конфигурации с именем «application.yml» из каталога resources. | | ClientStarter(String pathName) | Указывает имя файла конфигурации yml, формат — xxx.yml. | | ClientStarter(IRpcClientProperty property) | Создаёт конфигурацию через экземпляр javaBean для запуска клиента. |

  • Параметры конфигурации | Параметр | Значение | | --- | --- | | iRpcClient | Информация о конфигурации клиента iRpc. | | retryTimes | Количество попыток подключения к серверному узлу в случае сбоя сети, по умолчанию — 3 раза. | | serverModCluster | true/false — указывает, является ли серверный узел режимом leader-flower. | | serverNode | Информация об узле iRpcServer. | | ip | IP-адрес узла iRpcServer (или домен). | | port | Порт службы узла iRpcServer. |

  • Шаблон конфигурации yml

# iRpc 客户端配置信息
iRpcClient:
  retryTimes: 3
  serverModCluster: true
  serverNode:
    - ip: 127.0.0.1 # 指定 iRpc 客户端连接的 iRpc 服务端节点信息,默认与第一个节点建立连接。
      port: 10916
    - ip: 127.0.0.1
      port: 10917
    - ip: 127.0.0.1
      port: 10918

Отправка сообщений

Основной класс для отправки сообщений — iRpc.base.messageDeal.MessageSender.

Метод Режим отправки Результат возврата
synBaseMsgSend Синхронный ResponseData-объект, returncode != 200 — отправка не удалась.
asynBaseMsgSend Асинхронный boolean, успешное или неудачное выполнение, результат выполнения обрабатывается через обратный вызов.

Процесс запуска

Как внедрить

Версия выпуска iRpc синхронизирована с центральным репозиторием maven, поэтому можно выбрать подходящую версию в зависимости от ситуации проекта.

<dependency>
  <groupId>io.github.brianapple</groupId>
  <artifactId>iRpc</artifactId>
  <version>2.0.1-Release</version>
</dependency>

Версия

  • 1.0.2.Release — исправлена ошибка, из-за которой клиент не мог нормально запуститься в версиях 1.0.1 и ранее.
  • 2.0.1 — поддерживает кластерное динамическое расширение, поддерживает настройку информации через javaBean.
  • 2.0.3 — улучшено кластерное расширение, поддерживается динамическое расширение «AB + C(A) -> ABC», «AB + C(AB) -> ABC» и другие режимы динамического расширения. См. тестовый класс в пакете iRpc.serverTest для метода тестирования.

Демо-клиент

public class Test {
    public static void main(String[] args) {
        ServerRpc();
    }
    /**
     * rpc 服务端
     */
    public static void ServerRpc(){
        ClientStarter clientStarter = new ClientStarter();
        try {
            Thread.sleep(6000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        while(true) {
            /**
             * 同步消息发送
             */
            Class<? >[] classType = new Class[]{String.class};
            Object[] argsData = new Object[]{"world"};
            ResponseData ret = MessageSender.synBaseMsgSend(false,
                    "iRpc.rpcService.RPCExportServiceImpl",
                    "test",
        classType,
        argsData,
        5000);
``` ### Клиент синхронизируется с данными: «ret.getData()»

    // Консоль выводит: клиент синхронизировался с данными: "hello world"
}
}

Функции кластера выборов и расширения

Выборы Raft

Базовый кластер использует алгоритм выборов Raft для самостоятельного выбора узлов. В текущем режиме выборов узел содержит информацию обо всех узлах в текущем кластере.

Выборы Raft

Расширение кластера — процесс выборов по-прежнему основан на Raft

Расширяемый узел и исходный кластер groupName должны совпадать, и iRpc не поддерживает объединение кластеров с двумя существующими узлами лидера.

AB + C(A) или AB + C(B) -> ABC

AB выбирает лидера на основе алгоритма Raft, а узел C участвует в расширении только с частью информации об узле из кластера AB. В итоге достигается единогласие в выборах.

AB + C(A) или  AB + C(B) -> ABC

AB + C(AB) -> ABC

На основе алгоритма Raft узел AB выбирает лидера, узел C участвует в расширении с информацией обо всех узлах исходного кластера и с совпадающим groupName.

AB + C(AB) -> ABC

Серия учебных пособий

Благодарности

Проект Netty и его авторы, адрес проекта: https://github.com/netty/netty Проект dledger и его авторы, адрес проекта: https://github.com/openmessaging/openmessaging-storage-dledger Проект IOTGate и его авторы, адрес проекта: https://gitee.com/willbeahero/IOTGate

Участие и вклад

  1. Форк этого репозитория.
  2. Создайте ветку Feat_xxx.
  3. Отправьте код.
  4. Создайте Pull Request.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

iRpc — это облегчённая, высокопроизводительная RPC-фреймворк, основанная на технологии NIO. Она поддерживает выборы лидера на основе алгоритма raft и не зависит от сторонних реализаций для автономных выборов между узлами leader-follower. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (2)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/willbeahero-iRpc.git
git@api.gitlife.ru:oschina-mirror/willbeahero-iRpc.git
oschina-mirror
willbeahero-iRpc
willbeahero-iRpc
master