手写RPC框架
手写一个基于Netty的RPC框架
嗷嗷嗷嗷_
在读研究生
JAVA 后端
GIS
展开
-
手写RPC框架之动态代理实现远程服务调用
的撒旦原创 2020-12-21 19:19:15 · 592 阅读 · 0 评论 -
手写RPC框架之网络传输协议设计及实现
本文主要介绍my-rpc框架中网络传输数据的格式设计,以及如何在发送和接收数据的过程中进行的编解码过程。网络传输协议设计数据在网络中是以字节(二进制)的形式传输的,要让通信的双方都能正确的接收对方发送的信息,一定要定义好数据格式,要让对方知道如何解析,从哪一位开始到哪一位代表什么含义,数据的总长度是多少,以避免多读或少读发生解析错误和粘包等问题。参考TCP协议对TCP数据包的设计,以下是my-rpc框架设计的网络传输的数据包(my-rpc-package)格式,分为header和body两部分:原创 2020-12-10 15:45:59 · 619 阅读 · 2 评论 -
手写RPC框架之序列化协议选择
1 序列化介绍2 JDK自带的序列化方式3 KryoKryo github官网:https://github.com/EsotericSoftware/kryo在Dubbo中使用高效的Java序列化(Kryo和FST)public interface Serializer { /** * 序列化 * @param obj 序列化对象 * @return 字节数组 */ byte[] serialize(Object obj); /原创 2020-12-08 17:32:42 · 348 阅读 · 0 评论 -
手写RPC框架之集成spring(基于xml配置文件方式)
Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展 进行加载。同样,我们的RPC框架也集成Spring帮助我们更好地实现基于配置的可定制化的加载。自定义标签及解析标签用途<rpc:service/>用于服务提供方配置需要注册的服务<rpc:reference/>用于服务消费方配置引用的服务<r原创 2020-12-07 15:03:36 · 366 阅读 · 0 评论 -
手写RPC框架之服务注册与发现
从dubbo的服务架构可以看出, Registry主要提供服务的注册与发现功能:即服务的提供方将服务注册在Registry中,而服务的消费方可以从注册的服务里获取提供方的ip地址等信息,从而进行远程过程调用。服务注册中心选型Zookeeper服务存储分层Zookeeper数据存储方式类似于树的组织方式,一个节点下可以有多个子节点。参考上面dubbo中zookeeper的分层方式,在该rpc框架中简化分为root、service和address三层,如下。root层主要就是标识框架的名字,无实.原创 2020-12-06 19:50:20 · 338 阅读 · 0 评论 -
手写RPC框架之负载均衡
这篇文章一个是记录自己RPC框架中的负载均衡实现,另一个其实更多在于介绍dubbo的负载均衡策略,因为自己实现的负载均衡算法较为简单,也是从dubbo中借鉴而来。代码实现首先还是介绍自己实现的负载均衡。LoadBalance 接口 :@SPI表明可以都可扩展点加载机制来获取@SPIpublic interface LoadBalance { String selectServiceAddress(List<String> serviceAddresses, String rp原创 2020-12-04 16:29:56 · 424 阅读 · 0 评论 -
NettyServer端的线程处理模型
NettyServer端结合图理解代码// 动态获取当前主机ipString host = InetAddress.getLocalHost().getHostAddress();int port = 8888;NioEventLoopGroup boosGroup = new NioEventLoopGroup(1);NioEventLoopGroup workerGroup = new NioEventLoopGroup(2); // 默认为cpu核数*2 这里手动设置为2Defaul原创 2020-11-20 17:43:10 · 327 阅读 · 1 评论 -
服务端监听127.0.0.1 客户端不能通过本机ip访问
Netty-Server 端监听了本地127.0.0.1端口ChannelFuture future = serverBootstrap.bind("127.0.0.1", PORT).sync();Netty-Client 端通过服务注册中心Zookeeper获取的是本地的ip192.168.61.55,通过该地址访问server端,会出现错误Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connect原创 2020-11-16 15:55:09 · 2132 阅读 · 0 评论