一块儿写个Dubbo——0. 一些不得不说的话

前言

本文原载于个人博客,地址:https://blog.guoziyang.top/archives/60/,项目地址:https://github.com/CN-GuoZiyang/My-RPC-Frameworkgit

差很少五月份左右,我开始准备秋招。除了天天刷题或者复习,就得开始准备准备项目了。由于我主要是Java后端,项目是很好找的,主要就是各类管理系统和商城项目。于此同时,我也在思考,怎么能够准备一个更加出彩的、不同凡响的项目,能够直接引导你与面试官的聊天方向?直到,我看到了Guide哥RPC框架,眼前一亮。github

众所周知,用框架和写框架所须要的对框架的熟悉程度显然不在一个级别。若是你能亲手写一个RPC框架,那么几乎全部的RPC相关的问题就很难问倒你了(除非是具体到某个框架)。因而,我开始研究这个项目。web

苦于Guide哥没有写教程,我只能按照commits历史,一点一点揣测每一点变化的意义,而且临摹下来(照葫芦画瓢),固然,在临摹过程当中,我仍是有不少本身的想法的,例如自定义协议、以及序列化与负载均衡算法可配置、注解方式服务发现等。感兴趣的同窗能够照着这个教程自行完成一个。面试

介绍

介绍其实没有什么,主要仍是Readme里那一套,详见上一章Readme。算法

这个教程和Guide哥的commits同样,是按部就班的,从一个最简单的BIO + Java序列化开始,逐步完善成Netty + 多序列化方式的比较完整的框架,而且配置了Nacos服务发现(没用Zookeeper的缘由仅仅是由于我不会)。后端

在每一章节的开头,我都会放出该章节对应的commit地址,方便查看代码。api

整个项目位于https://github.com/CN-GuoZiyang/My-RPC-Framework负载均衡

项目结构

项目结构

  • docs文件夹:这个文档的源文件
  • images文件夹:Readme所用到的图片(其实只有一张)
  • rpc-api文件夹:服务端与客户端的公共调用接口
  • rpc-common文件夹:项目中的一些通用的枚举类和工具类
  • rpc-core文件夹:框架的核心实现
  • test-client文件夹:测试用的客户端项目
  • test-server文件夹:测试用的服务端项目
  • .gitignore:就是.gitignore
  • .travis.yml:持续集成的脚本(其实什么也没干)
  • LICENSE:基于MIT开源协议哦
  • README.md:就是Readme
  • pom.xml:项目的总的pom

开发环境

  • macOS Catalina 10.15.5
  • Java SE 1.8.0_231
  • JetBrain IntelliJ IDEA