iRpc为一款基于Nio通信实现的轻量级高性能rpc框架,支持单机及leader-follower部署模式,配置简单,通信效率高。 提供同步和异步(callBack模式)等多种消息发送方式,不依赖于第三方注册中心即可实现服务端自主选举(选举模块基于dleger源码改造),
构造方法 | 作用 |
---|---|
ServerStarter() | 默认加载配置文件名为"application.yml"的配置文件,加载位置默认为resources目录下 |
ServerStarter(String pathName) | 指定配置yml文件名称,格式为xxx.yml |
ServerStarter(IRpcServerProperty property) | 通过javaBean方式配置服务端信息 |
... | 带扩展 |
server端yml配置信息详解
参数名称 | 含义 |
---|---|
iRpcServer | iRpc服务端配置信息 |
serverPort | 服务端监听端口 |
heartbeat | 服务端监测客户端心跳周期-暂未使用 |
nodeName | 当前服务节点名称,为ClusterNode-node值 |
ClusterNode | leader-flower集群模式节点信息,集群模式下多个节点的ClusterNode信息一样 |
node | 节点名称(建议使用:n0-nx,沿用的是dleger的模式), |
ip | iRpcServer节点ip地址(或域名) |
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 | serverNode节点网络连接失败重试次数,默认为3次 |
serverModCluster | true/false 服务端是否为leader-flower模式 |
serverNode | iRpc server端节点信息 |
ip | iRpcServer节点ip地址(或域名) |
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);
System.out.println("客户端同步收到数据:"+ret.getData());
//控制台输出:客户端同步收到数据:hello world
}
}
}
基本集群基于raft选举算法实现节点自举,当前选举模式下,节点包含当前集群下所有节点信息
扩容节点和原集群groupName必须一致,且iRpc不支持两个存在leader节点的集群合并扩容
AB基于raft算法自举选出leader,C节点只携带AB集群中的一部分节点信息参与扩容,最终达成选举一致。
AB基于raft算法自举选出leader,C节点携带原集群所有节点信息且groupName一致,参与集群扩容
Netty 项目及作者,项目地址: https://github.com/netty/netty dledger 项目及作者,项目地址: https://github.com/openmessaging/openmessaging-storage-dledger IOTGate 项目及作者,项目地址:https://gitee.com/willbeahero/IOTGate
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。