rpc

rpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo。

主要用于个人学习,由渐入深,理解 rpc 的底层实现原理。

前言

工作至今,接触 rpc 框架已经有很长时间。

但是对于其原理一直只是知道个大概,从来没有深入学习过。

以前一直想写,但由于各种原因被耽搁。

技术准备

Java 并发实战学习

TCP/IP 协议学习笔记

Netty 权威指南学习

这些技术的准备阶段,花费了比较长的时间。

也建议想写 rpc 框架的有相关的知识储备。

其他 rpc 框架使用的经验此处不再赘述。

快速迭代

原来一直想写 rpc,却不行动的原因就是想的太多,做的太少。

想一下把全部写完,结果就是啥都没写。

所以本次的开发,每个代码分支做的事情实际很少,只做一个功能点。

陆陆续续经过近一个月的完善,对 rpc 框架有了自己的体会和进一步的认知。

代码实现功能,主要参考 Apache Dubbo

文档

文档

文档将使用 markdown 文本的形式,补充 code 层面没有的东西。

代码注释

代码有详细的注释,便于阅读和后期维护。

测试

目前测试代码算不上完善。后续将陆续补全。

rpc 模块

rpc-common 公共代码

rpc-server 服务端

rpc-client 客户端

rpc-register 注册中心

rpc-test 测试模块

代码分支

release_0.0.1-server 服务端启动

release_0.0.2-client 客戶端启动

release_0.0.3-客户端调用服务端

release_0.0.4-p2p 客户端主动调用服务端

release_0.0.5-serial 序列化

release_0.0.6-通用的反射调用

release_0.0.7-timeout 超时处理

release_0.0.8-register 注册中心

release_0.0.9-load balance 负载均衡

release_0.1.0-callType 调用方式

release_0.1.1-fail 失败策略

release_0.1.2-generic 泛化调用

release_0.1.3-gracefully 优雅关闭

release_0.1.4-interceptor 拦截器

测试代码

从 v0.0.6 及其之后,为了让代码保持纯净,将测试代码全部放在 rpc-example。

每个测试代码和实现版本一一对应。

rpc-example

文档说明

0.0.1-server 服务端启动

0.0.2-client 客戶端启动

0.0.3-客户端调用服务端

0.0.4-p2p 客户端主动调用服务端

0.0.5-serial 序列化

0.0.6-通用反射调用

0.0.7-timeout 超时处理

0.0.8-register 注册中心

0.0.9-load balance 负载均衡

0.1.0-callType 调用方式

0.1.1-fail 失败策略

0.1.2-generic 泛化调用

0.1.3-gracefully 优雅关闭

0.1.4-interceptor 拦截器

从零开始手写 dubbo rpc 框架的更多相关文章

  1. 手写一个RPC框架

    一.前言 前段时间看到一篇不错的文章<看了这篇你就会手写RPC框架了>,于是便来了兴趣对着实现了一遍,后面觉得还有很多优化的地方便对其进行了改进. 主要改动点如下: 除了Java序列化协议 ...

  2. 手写实现RPC框架(不带注册中心和带注册中心两种)

    实现自己的RPC框架如果不需要自定义协议的话那就要基于Socket+序列化. ProcessorHandler:主要是用来处理客户端的请求. package dgb.nospring.myrpc; i ...

  3. 从0 开始手写一个 RPC 框架,轻松搞定!

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 来源:juejin.im/post/5c4481a4f265da613438aec3 之前在 RPC框架底层到底什么原理得知 ...

  4. 从零开始手写 spring ioc 框架,深入学习 spring 源码

    IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理. 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过 ...

  5. java 从零开始手写 RPC (04) -序列化

    序列化 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实 ...

  6. java 从零开始手写 RPC (05) reflect 反射实现通用调用之服务端

    通用调用 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何 ...

  7. java 从零开始手写 RPC (03) 如何实现客户端调用服务端?

    说明 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 写完了客户端和服务端,那么如何实现客户端和服务端的 ...

  8. java 从零开始手写 RPC (07)-timeout 超时处理

    <过时不候> 最漫长的莫过于等待 我们不可能永远等一个人 就像请求 永远等待响应 超时处理 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RP ...

  9. 从零开始实现一个分布式RPC框架

    该rpc框架是一个mini版的dubbo.学习rpc之前,建议先了解NIO,Netty和Dubbo等知识.请移步网络编程 前言:(借用阿里大佬的一段话) 为什么要自己写一个RPC框架,我觉得从个人成长 ...

随机推荐

  1. PTA 1139 1138 1137 1136

    PAT 1139 1138 1137 1136 一个月不写题,有点生疏..脑子跟不上手速,还可以啦,反正今天很开心. PAT 1139 First Contact 18/30 找个时间再修bug 23 ...

  2. js的模糊查询

    在项目中会用到模糊查询,之前在首页是用的element的tree显示的目录,会有用到搜索,但tree里边会有自带的模糊查询,用filter-node-method方法使用 但上次的项目中 又涉及到不试 ...

  3. 用.NET解索尼相机ARW格式照片

    用.NET解索尼相机ARW格式照片 目前常用的照片格式是.jpg,它只能提供8bit的色彩深度,而目前主流的相机都能提供高达12bit-14bit的色彩深度,动态范围和后期处理能力也大大增加,这也是为 ...

  4. React - 组件:类组件

    目录: 1. 类组件有自己的状态 2. 继承React.Component-会有生命周期和this 3. 内部需要一个render函数(类组件会默认调用render方法,但不会默认添加,需要手动填写r ...

  5. js2——定时跳转

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. 十一、springboot 配置log4j2以及打包成zip文件

    前言 其实我们前面已经配置了日志,但是最近总感觉日志日志格式看的不舒服,并且每次打包都是一个jar 文件,lib都包含在jar 中,每次做很小的修改都需要重新替换jar文件,jar文件会比较大,传输起 ...

  7. 洛谷 CF402A Nuts 题解

    本蒟蒻又来发题解啦! 这题是个紫题? 好吧,恶意评分可海星? 回到正题 这题很明显是贪心啊: 有a个坚果,b个隔板,x个隔板,最多分成v个区间. 那么我们的贪心策略是: 如果一共使用的挡板小于x,且当 ...

  8. vue 常用的官网

    vue.js     https://cn.vuejs.org/ v-charts  https://v-charts.js.org/#/                    (图表,地图) web ...

  9. CoderForces985F-Isomorphic Strings

    F. Isomorphic Strings time limit per test 3 seconds memory limit per test 256 megabytes input standa ...

  10. Ceph 块存储

    任何普通的linux主机都可以充当ceph客户机,客户机通过网络与ceph存储集群交互以存储或检索用户数据.Ceph RBD支持已经添加到linux主线内核中,从2.6.34以及以后版本开始. === ...