
手写RPC框架
文章平均质量分 86
从jdk序列化机制以及Socket进行远程调用开始,后逐渐引入Netty,自定义序列化机制来完善手写的RPC框架。
fzzfrjf
这个作者很懒,什么都没留下…
展开
-
简易RPC框架实现——8、引入SPI机制实现动态可拔插,引入一致性哈希进行负载均衡
引入一致性哈希实现负载均衡,引入SPI机制实现动态拔插原创 2022-06-13 17:35:21 · 823 阅读 · 0 评论 -
简易RPC框架实现——7、实现服务端自动注册服务
本章利用反射机制实现了服务的自动注册原创 2022-06-03 09:47:20 · 571 阅读 · 1 评论 -
简易RPC框架实现——6、实现服务自动注销,引入心跳机制
本章在前篇引入nacos的基础上,继续实现了对于服务下线时,服务自动注销的功能,而且基于Netty心跳机制,来实现服务端与客户端通道的保活。原创 2022-06-01 13:12:13 · 565 阅读 · 0 评论 -
简易RPC框架实现——5、引入Nacos实现服务管理
本章实现了引入注册中心对于客户端以及服务端服务交互的一个管理,commit的版本号为0286460,并在注册中心对于服务端服务暴露中引入了负载均衡策略。注册中心回顾我们第一章所提到的关于RPC框架的一个整体框图,为了在大量分布式的模块中进行各个模块的通信,我们需要引入一个注册中心实现对于各个模块之间的管理,来保证各个模块之间通信的可靠。目前比较主流的注册中心有Nacos,Zookeeper以及Eruka,以下列举了几种主流注册中心的比较:由于nacos易用,有稳定的控制台,且数据实时更新,因此本原创 2022-05-30 10:48:09 · 1627 阅读 · 0 评论 -
简易RPC框架实现——4、客户端非阻塞处理
本章将NettyClient中发送请求后的阻塞改为异步非阻塞,利用CompletableFutue.get(),将阻塞环节放置到了代理类中,能更大地提高服务器地吞吐量。本章地commit为8dcf034。利用Map缓存未处理地请求将每一个请求以及其对应的CompletableFuture放入缓存中,之后通过异步地方式去获取请求地结果,首先需要建一个UnprocessedRequest用来缓存request对应地处理结果,为了使得缓存全局唯一,使用单例工厂模式创建UnprocessedRequest:p原创 2022-05-25 11:55:02 · 288 阅读 · 0 评论 -
简易RPC框架实现——3、引入Netty实现网络通信
本章是在前面基于socket通信基础上的一种改进,引入了netty实现了客户端与服务端的网络通信,本章改动较大,对应的commit为cf7021b。Netty是一个非阻塞I/O客户端-服务器框架,主要用于开发Java网络应用程序,如协议服务器和客户端。异步事件驱动的网络应用程序框架和工具用于简化网络编程,例如TCP和UDP套接字服务器。Netty包括了反应器编程模式的实现。(源自维基百科)。既然涉及到了网络编程,那么就离不开java中网络编程的王者——Netty。Netty的使用方法本文不做过多赘述,如原创 2022-05-24 11:47:58 · 590 阅读 · 0 评论 -
简易RPC框架实现——2、引人入注册表
本章引入了注册表来存储服务端注册的服务,并实现了对于反射调用与线程池线程解耦的工作。本章对应commit为2e1351e。在上一章我们实现了一个基于jdk序列化机制的简单BIO RPC框架。但是我么在测试中会发现,由于我们的服务是伴随着服务端开启进行注入的,那么我们每一个服务就只能注册一个服务。我们在本章就引入一个服务注册表,来实现多个服务的注册。服务注册表创建一个服务注册的顶级接口,里边分别有着服务注册以及发现服务的方法:public interface ServerPublisher {原创 2022-05-19 13:47:20 · 285 阅读 · 0 评论 -
简易RPC框架实现——1、基于jdk序列化机制的BIO实现
本文主要实现了一个简易RPC框架的实现,项目地址为https://github.com/fzzfrjf/FZZF-RPC本章对应的commit为43a5918,主要是基于jdk自带的序列机制以及BIO实现了远程方法调用。概述RPC框架,主要就是解决在实现物理隔离的不同服务之间,调用属于其他服务的方法(是不是感觉类似与feign),RPC框架与feign远程调用的最大区别就是feign需要实现http协议,而RPC框架可以不用走http协议。在RPC中习惯于将调用请求者叫做client端,被调用者叫做原创 2022-05-18 23:14:23 · 234 阅读 · 0 评论