rpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo。
主要用于个人学习,由渐入深,理解 rpc 的底层实现原理。
-
基于 netty4 的客户端调用服务端
-
p2p 调用
-
serial 序列化支持
-
timeout 超时处理
-
register center 注册中心
-
load balance 负载均衡
-
callType 支持 oneway sync 等调用方式
-
fail 支持 failOver failFast 等失败处理策略
-
generic 支持泛化调用
-
gracefully 优雅关闭
-
rpcInterceptor 拦截器
-
filter 过滤器
-
check 客户端启动检测服务是否可用
-
heartbeat 服务端心跳
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>rpc-all</artifactId>
<version>${rpc.version}</version>
</dependency>
ps: 如果本地 p2p 测试,register 注册中心可选。
RegisterBs.newInstance().start();
ServiceBs.getInstance()
.register(ServiceIdConst.CALC, new CalculatorServiceImpl())
.registerCenter(ServiceIdConst.REGISTER_CENTER)
.expose();
// 服务配置信息
ReferenceConfig<CalculatorService> config = ClientBs.newInstance();
config.serviceId(ServiceIdConst.CALC);
config.serviceInterface(CalculatorService.class);
// 自动发现服务
config.subscribe(true);
config.registerCenter(ServiceIdConst.REGISTER_CENTER);
// 拦截器测试
config.rpcInterceptor(new CostTimeInterceptor());
CalculatorService calculatorService = config.reference();
CalculateRequest request = new CalculateRequest();
request.setOne(10);
request.setTwo(20);
CalculateResponse response = calculatorService.sum(request);
System.out.println(response);
工作至今,接触 rpc 框架已经有很长时间。
但是对于其原理一直只是知道个大概,从来没有深入学习过。
以前一直想写,但由于各种原因被耽搁。
这些技术的准备阶段,花费了比较长的时间。
也建议想写 rpc 框架的有相关的知识储备。
其他 rpc 框架使用的经验此处不再赘述。
原来一直想写 rpc,却不行动的原因就是想的太多,做的太少。
想一下把全部写完,结果就是啥都没写。
所以本次的开发,每个代码分支做的事情实际很少,只做一个功能点。
陆陆续续经过近一个月的完善,对 rpc 框架有了自己的体会和进一步的认知。
代码实现功能,主要参考 Apache Dubbo
文档将使用 markdown 文本的形式,补充 code 层面没有的东西。
代码有详细的注释,便于阅读和后期维护。
目前测试代码算不上完善。后续将陆续补全。
模块 | 说明 |
---|---|
rpc-common | 公共代码 |
rpc-register | 注册中心 |
rpc-server | 服务端 |
rpc-client | 客户端 |
rpc-all | 全部引用模块(简化包引用) |
release_0.0.9-load balance 负载均衡
release_0.1.4-rpcInterceptor 拦截器
从 v0.0.6 及其之后,为了让代码保持纯净,将测试代码全部放在 rpc-example。
每个测试代码和实现版本一一对应。
ps: 这部分测试代码可以关注公众号【老马啸西风】,后台回复【rpc】领取。
-
all 模块
-
check 客户端启动检测
-
register 是否注册到注册中心
-
delay 延迟暴露
-
关闭时通知 register center
-
优雅关闭添加超时设置
-
heartbeat 心跳检测机制
-
完善 load-balance 实现
-
完善 filter 实现
-
完善 rpcInterceptor 实现
-
失败重试的拓展
尝试其他服务端
指定重试策略(sisyphus)
- route 路由规则
可以和 echo 回声检测一起实现
-
echo 回声服务
-
spring 整合
-
springboot 整合
-
telnet 命令行治理
-
rpc-admin 控台管理
服务治理
-
async 异步执行
-
cache 结果缓存? -
validator 参数校验 -
服务降级 -
version 多版本管理