iRpc
iRpc — это легковесная высокопроизводительная RPC-фреймворк, основанный на Nio-коммуникации. Он поддерживает одноузловую и leader-follower-развёртывание, прост в настройке и эффективен в коммуникации.
Он предоставляет различные способы отправки сообщений, включая синхронный и асинхронный (с использованием обратного вызова), и не зависит от сторонних центров регистрации для реализации самостоятельного выбора сервера (модуль выбора основан на коде dleger).
Конструктор | Конструктор | Назначение | | --- | --- | | 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() | По умолчанию загружает файл конфигурации с именем «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>
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 для самостоятельного выбора узлов. В текущем режиме выборов узел содержит информацию обо всех узлах в текущем кластере.
Расширяемый узел и исходный кластер groupName должны совпадать, и iRpc не поддерживает объединение кластеров с двумя существующими узлами лидера.
AB выбирает лидера на основе алгоритма Raft, а узел C участвует в расширении только с частью информации об узле из кластера AB. В итоге достигается единогласие в выборах.
На основе алгоритма Raft узел AB выбирает лидера, узел C участвует в расширении с информацией обо всех узлах исходного кластера и с совпадающим groupName.
Проект Netty и его авторы, адрес проекта: https://github.com/netty/netty Проект dledger и его авторы, адрес проекта: https://github.com/openmessaging/openmessaging-storage-dledger Проект IOTGate и его авторы, адрес проекта: https://gitee.com/willbeahero/IOTGate
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )