MiniRPC- 源码阅读
2021-07-01 19:31:03 0 举报
AI智能生成
源码阅读,阅读MiniRPC 代码总结,带你自己编写RPC框架。
作者其他创作
大纲/内容
(5)源码细节
Netty框架(数据传输框架)
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
Zookeeper(注册中心框架)
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
</dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
</dependency>
Jackson (序列化框架-1)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
hession (序列化框架-2)
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
</dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
</dependency>
(6)学习到的技术点
(思维导读 + 思考 +总结)
(思维导读 + 思考 +总结)
(1)Bean的生命周期
BeanFactoryPostProcessor 后置增强类,添加消费端的代理BeanDefinition
(2) netty 编解码
ByteToMessageDecoder
MiniRpcDecoder 解码器
MessageToByteEncoder
MiniRpcEncoder 编码器
(3)JDK动态代理
RpcInvokerProxy
代理Consumer消费端对象
(4) 策略模式
序列化算法中,通过消息头中类型指定
HessianSerialization
JsonSerialization
(5)Zookeeper开源客户端
Curator
“Guava is to java what Curator is to Zookeeper”
“Guava is to java what Curator is to Zookeeper”
分布式锁
分布式ID生成器
注册中心使用 Dubbo
修改事件监听器
Zookeeper基础
数据模型
发布订阅
ACL权限控制
序列化
Watch健康
(6) Redis开源客户端
Redisson
"Guava is to java what Redisson is to Redis"
"Guava is to java what Redisson is to Redis"
分布式锁
Redlock
FairLock
MultiLock
lock
分布式ID生成器
Id generator
Bloom Filter
AtomicLong
序列化支持
Avro
JDK Serialization
MsgPack
Kryo
集合选项
Map
Set
List
SortedSet
Queue
Blocking Queue
Delayed Queue
并发工具类的分布式应用
Semaphore
CountDownLatch
ReadWriteLock
Redis基础
数据模型
发布/订阅消息
序列化
集群
Single
Cluster
Sentinel
Master/slave
(7)自己动手撸一个
(践行实践)
(践行实践)
延迟消息队列服务 (xiaoshu-mq-broker)
xiaoshu-mq-server
序列化实现
编解码Encoder and Decoder
DelayQueue 延迟队列
心跳检测机制;heartbeat
xiaoshu-mq-provider
xiaoshu-mq-consumer
考虑问题点
编解码/序列化和反序列化
心跳检测机制-掉线通知-踢出功能实现
在线客户端数量,在线客户端信息
集群高可用
参数配置 性能提升
消息可靠性,如何保证消息不丢失(持久化)
消息队列的长度控制(消息积压怎么办 )
消息拒绝策略
消息转发策略
消息的顺序性
功能性测试,是否符合功能需求
性能性测试,是否符合性能需求
代码优化
调整包结构
core包
基础工具类
Protocol包
协议制定
序列化和反序列化
编解码 Encoder 和 Decoder
message包
消息类型
消息格式定义信息
消息头信息
延迟队列实现抽象接口
使用DelayQueue实现
使用RabbitMQ等第三方消息队列实现
使用 Redis消息队列实现
消息的可靠性
消息的持久化处理
添加消息的Ack机制
消息质量 Qos等级
(8)学习总结
(输出教授)
(输出教授)
想法-1
EMQX我是否可以写个插件,将消息同步到RabbitMQ中
想法-2
实现桥接,将接收所有EMQX的消息,并转发到其它第三方消息队列中
收获-1
边缘扩展原则:通过扩展自己的知识边界,了解更多知识点
收获-2
深度学习原则:通过实践&总结文档&教授给他人,提高知识留存率
收获-3
专注学习原则:专注于一件事情,时间越长,收获越大;
(1) 搭建环境
JDK1.8
Zookeeper 3.4.6 注册中心
Idea 2021.3
Maven 3.5.4
Git 下载代码
(2)包说明
rpc-consumer
功能:消费端方
服务消费者。使用动态代理发起 RPC 远程调用,帮助使用者来屏蔽底层网络通信的细节。
rpc-provider
功能:服务提供方
服务提供者。负责发布 RPC 服务,接收和处理 RPC 请求。
rpc-facade
功能:接口声明
RPC 服务接口。包含服务提供者需要对外暴露的接口,本模块主要用于模拟真实 RPC 调用的测试。
rpc-protocol
功能:协议制定,序列化和反序列化
网络通信模块。包含 RPC 协议的编解码器、序列化和反序列化工具等。
rpc-registry
功能:注册信息,将服务注册到Zookeeper上面
注册中心模块。提供服务注册、服务发现、负载均衡的基本功能。
rpc-core
功能:基础公共功能,包含有请求和结果封装类
基础类库。提供通用的工具类以及模型定义,例如 RPC 请求和响应类、RPC 服务元数据类等。
(3) 使用到技术点
序列化和反序列化
Serialization
RpcSerialization
HessianSerialization
JsonSerialization
编解码
Codec
MiniRpcEncoder
MinRpcDecoder
消息协议的制定
+---------------------------------------------------------------+
| 魔数 2byte | 协议版本号 1byte | 序列化算法 1byte | 报文类型 1byte |
+---------------------------------------------------------------+
| 状态 1byte | 消息 ID 8byte | 数据长度 4byte |
+---------------------------------------------------------------+
| 数据内容 (长度不定) |
+---------------------------------------------------------------+
| 魔数 2byte | 协议版本号 1byte | 序列化算法 1byte | 报文类型 1byte |
+---------------------------------------------------------------+
| 状态 1byte | 消息 ID 8byte | 数据长度 4byte |
+---------------------------------------------------------------+
| 数据内容 (长度不定) |
+---------------------------------------------------------------+
BeanFactoryPostProcessor
Bean工程的后置处理类,针对BeanDefinition 注入消费端Service;
(4)设计模式
策略模式
协议中序列化方式: (1)JsonSerialization (2)HessianSerialization
(RpcSerialization)(RegistryFactory)
代理模式
RpcInvokerProxy
迭代器模式
RpcConsumerPostProcessor
单例模式
RegistryFactory.getInstance (懒汉模式)
0 条评论
下一页