[适合初中级Java程序员修炼手册从0搭建整个Web项目](九)

前言

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206
种一棵树最好的时间是十年前,其次是现在

six-finger-web

一个Web后端框架的轮子从处理Http请求【基于Netty的请求级Web服务器】 到mvc【接口封装转发)】,再到ioc【依赖注入】,aop【切面】,再到 rpc【远程过程调用】最后到orm【数据库操作】全部自己撸一个(简易)的轮子。githubhttps://github.com/bin392328206/six-finger-web

为啥要写这个轮子

其实是这样的,小六六自己平时呢?有时候喜欢看看人家的源码比如Spring,但是小六六的水平可能不怎么样,每次看都看得晕头转向,然后就感觉里面的细节太难了,然后我就只能观其总体的思想,然后我就想我如果可以根据各位前辈的一些思考,自己撸一个简单的轮子出来,那我后面去理解作者的思想是不是简单点呢?于是呢 six-finger-web就面世了,它其实就是我的一个学习过程,然后我把它开源出来,希望能帮助那些对于学习源码有困难的同学。还有就是可以锻炼一下自己的编码能力,因为平时我们总是crud用的Java api都是那些,久而久之,很多框架类的api我们根本就不熟练了,所以借此机会,锻炼一下。

特点

  • 内置由 Netty 编写 HTTP 服务器,无需额外依赖 Tomcat 之类的 web 服务(刚好小六六把Netty系列写完,顺便用下)

  • 代码简单易懂(小六六自己写不出框架大佬那种高类聚,低耦合的代码),能力稍微强一点看代码就能懂,弱点的也没关系,小六六有配套的从0搭建教程。

  • 支持MVC相关的注解确保和SpringMVC的用法类似

  • 支持Spring IOC 和Aop相关功能

  • 支持类似于Mybatis相关功能

  • 支持类似于Dubbo的rpc相关功能

  • 对于数据返回,只支持Json格式

絮叨

前面是已经写好的章节,下面我给大家来一一走一遍搭建流程

  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(一)

  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(二)

  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(三)

  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(四)

  • 适合初中级Java程序员修炼手册从0搭建整个Web项目(五)

  • [适合初中级Java程序员修炼手册从0搭建整个Web项目](六)

  • [适合初中级Java程序员修炼手册从0搭建整个Web项目](七)

  • [适合初中级Java程序员修炼手册从0搭建整个Web项目](八)

昨天已经实现了一个rpc,但是呢我们还没把他们整合到一个容器里面,让我们来回顾一下dubbo的架构图让我们把Spring容器给它补上去把!

来看看总的结构

其实代码呢?全是人家开源的,我就是搬过来然后自己跑了一下流程,把整个流程走通,然后再给大家梳理梳理。

这个要怎么讲呢?其实也就是二大块

  • 整合Spring

  • 基于Netty的通信

其他的呢?都是这个的拓展吧?我会一一给大家讲下的,但是我也是讲大概的流程,因为代码不是我写的,然后里面的操作我自己也不是很懂,但是总的意思我还是可以讲清楚了。

基于Spring

首先我们想,我们用Spring能做什么,还不是可以代替我们之前的服务注册,服务代理这些,那么我们就基于注解来实现一下我们的服务端的服务注册。

首先我们来看看服务端的注册的实现类

其实就是多了一个注解,@RpcService。这个注解的作用是啥呢?

其实就是可以通过注解来切面来完成服务的注册,然后结合spring的拓展点就很容易就能做到了

在spring包下的三个拓展类就是做这样的事情的,其实呢?我大概总结一下干了啥,然后你们再根据这个去跟源码

  • 自定义包扫描注解,我们知道在Spring中它是默认只扫描他们自己定义的注解变成Beandifinition的,但是给了我们拓展点

  • 然后再bean的初始化过程中,通过前置通知做服务的注册,后置通知就是bean的属性注入嘛,@RpcReference就是下面这个注解了

生成这个注解的代理对象,然后再注入到使用这个类的类中,这样的话,就能通过代理对象调用远程服务了

这个就是整合Spring的全部过程了,代码不多,但是真的都是核心,小六六也说的比较白话,不知道大家懂了没有。就是我们服务端的服务的注册,和客户端代理对象的生成,放到spring的生命周期中。

再一个就是基于Netty的通信方式,这个得好好讲讲东西还蛮多

然后我给大家捋捋顺序哈,我们知道rpc框架呢?肯定是有服务端 和客户端,对吧,然后上面我们提到得,我们已经在客户端生成了代理对象了是吧,那么我们接下来就是要调用服务端了,那么服务端首当其冲的当然是我们NettyClientTransport,

NettyClientTransport->sendRpcRequest

这个类就是首先去zk 拿到远程ip 然后去自己的客户端的Netty拿一个channel然后往服务端发送消息,然后我们知道Netty的pipeline的调用链机制是吧(不知道去补补Netyy) 然后它就会去到我们Encode 这个类了

RpcMessageDecoder->encode

然后在这里面会经过我们的系列化,我们的数据压缩,其实这就是为啥rpc比我们传统http请求快的一个原因吧,

然后这里面涉及到了2个组件,一个是序列化组件,一个是压缩组件。

具体里面我就不说了,大家自己去看吧

然后我们继续我们的流程,经过序列化,压缩之后,数据就要经过我们的网络模型了,最后到我们服务端接收了,

然后就到我们的服务端Netty的类了,也是先解压,反解码 RpcMessageDecoder

之后再去

处理完成然后就走了,这样整个过程就都清楚了

测试

  • Server

  • Client

结尾

RPC到这算是完了,但是呢?dubbo的源码有机会还是去看看吧,因为我自己公司的技术栈是Cloud,对于Dubbo其实并不熟悉,所以就只能去慢慢理解人家的东西,不过我感觉自己也学到了不少,如果大家一边跟源码,一边看我的博客,肯定没有问题,但是如果直接看可能也有些地方不清楚的,嗯。接下来就是ORM ,这样整个Web的轮子也算是完整了。

日常求赞

好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是真粉。

创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章

六脉神剑 | 文 【原创】如果本篇博客有任何错误,请批评指教,不胜感激 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值