从零开始实现简单 RPC 框架 4:注册中心

RPC 中服务消费端(Consumer) 需要请求服务提供方(Provider)的接口,必须要知道 Provider 的地址才能请求到。那么,Consumer 要从哪里获取 Provider 的地址呢?能不能 Consumer 自己配置 Provider 的地址?这种方式理论上是可行的,不过事实上没人这么做。这种方式有以下缺点: Consumer 每引用一个接口,需要配置一次 Provider 的服务地址,...

从零开始实现简单 RPC 框架 2:扩展利器 SPI

RPC 框架有很多可扩展的地方,如:序列化类型、压缩类型、负载均衡类型、注册中心类型等等。假设框架提供的注册中心只有zookeeper,但是使用者想用Eureka,修改框架以支持使用者的需求显然不是好的做法。最好的做法就是留下扩展点,让使用者可以不需要修改框架,就能自己去实现扩展。JDK 原生已经为我们提供了 SPI 机制,ccx-rpc 在此基础上,进行了性能优化和功能增强。在讲解 ccx-rpc 的增...

从零开始实现简单 RPC 框架 5:网络通信之序列化

我们在接下来会开始讲网络通信相关的内容了。既然是网络通信,那必然会涉及到序列化的相关技术。下面是 ccx-rpc 序列化器的接口定义。/** * 序列化器 */public interface Serializer { /** * 序列化 * * @param object 要序列化的对象 * @return 字节数组 */ byte[] serialize(Object object); /** * 反序...

从零开始实现简单 RPC 框架 6:网络通信之 Netty

网络通信的开发,就涉及到一些开发框架:Java NIO、Netty、Mina 等等。理论上来说,类似于序列化器,可以为其定义一套统一的接口,让不同类型的框架实现,事实上,Dubbo 就是这么干的。但是,作为一个简单的 RPC 框架,ccx-rpc 就先不统一了,因为基本上网络框架是不会换的,而且统一起来代码量巨大。ccx-rpc 选择的网络框架是 Netty,Netty 是一款大名鼎鼎的异步事件驱动的网络应...

从零开始实现简单 RPC 框架 7:网络通信之自定义协议(粘包拆包、编解码)

当 RPC 框架使用 Netty 通信时,实际上是将数据转化成 ByteBuf 的方式进行传输。那如何转化呢?可不可以把 请求参数 或者 响应结果 直接无脑序列化成 byte 数组发出去?答:直接序列化传输是不行的,会出现粘包拆包的问题。粘包拆包什么是粘包拆包RPC 通信使用 TPC (别问我为什么不用 UDP),TCP 是一个“流”协议。所谓流,就是没有界限的一长串二进制数据。TCP 作为传输层协议,...
© 2021 LMLPHP 关于我们 联系我们 友情链接 耗时0.010513(s)
2021-09-24 07:58:18 1632441498