最近一直在看Netty
相关的内容,也在编写一个轻量级的RPC
框架来练手,途中发现了Netty
的源码有很多亮点,某些实现甚至可以用苛刻来形容。另外,Netty
提供的工具类也是相当优秀,可以开箱即用。这里分析一下个人比较喜欢的领域,并发方面的一个Netty
工具模块 - Promise
。
环境版本:
Netty:4.1.44.Final
JDK1.8
前置文章:
前一篇文章简单介绍了通过动态代理完成了Client
端契约接口调用转换为发送RPC
协议请求的功能。这篇文章主要解决一个遗留的技术难题:请求-响应同步化处理。
需要的依赖如下:
JDK1.8+
Netty:4.1.44.Final
SpringBoot:2.2.2.RELEASE
前置文章:
前一篇文章相对简略地介绍了RPC
服务端的编写,而这篇博文最要介绍服务端(Client
)的实现。RPC
调用一般是面向契约编程的,而Client
的核心功能就是:把契约接口方法的调用抽象为使用Netty
向RPC
服务端通过私有协议发送一个请求。这里最底层的实现依赖于动态代理,因此动态代理是动态实现接口的最简单方式(如果字节码研究得比较深入,可以通过字节码编程实现接口)。需要的依赖如下:
JDK1.8+
Netty:4.1.44.Final
SpringBoot:2.2.2.RELEASE
前置文章:
Github Page
:《基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇》Coding Page
:《基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇》在前置的《基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇》一文中已经定义了一个相对简单的RPC
私有协议,并且实现了对应的编码和解码模块。这篇文章基于协议篇,完成Server
端代码调用的编写。考虑到目前相对主流的IOC
容器是Spring
,这里选用了spring-boot-starter
(非MVC
容器,只是单纯管理Bean
),依赖JDK1.8+
。
最近对网络编程方面比较有兴趣,在微服务实践上也用到了相对主流的RPC
框架如Spring Cloud Gateway
底层也切换为Reactor-Netty
,像Redisson
底层也是使用Netty
封装通讯协议,最近调研和准备使用的SOFARpc
也是基于Netty
封装实现了多种协议的兼容。因此,基于Netty
造一个轮子,在SpringBoot
的加持下,实现一个轻量级的RPC
框架。这篇博文介绍的是RPC
框架协议的定义以及对应的编码解码处理的实现。