# MyRocketMq
**Repository Path**: hpc_0/MyRocketMq
## Basic Information
- **Project Name**: MyRocketMq
- **Description**: RocketMq4.2.0到RocketMq4.6.0升级以及整体架构
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: release-4.2.0
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2020-10-10
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# MyRocketMq
#### 介绍
使用java NIO技术作为消息存储引擎、使用java netty作为底层通信模块
#### 软件架构
1、基于reactor模式的实现, 利用java nio中selector对象
详情请看pdf: https://cugxdy.oss-cn-beijing.aliyuncs.com/java/nio.pdf
2、分布式系统设计:
1、CAP理论: 可用性、一致性、分区容错性
2、BASE理论: 可用性、一致性、分区容错性
3、分布式通信组件Netty: 它解决了分布在不同地域上主机相互连接通信, 使用计算机网络将多台计算机组成整体对外提供服务
1、通信协议设计: HTTP、MQTT、User
2、通信协议序列化|反序列化: protobuf、marshalling、json、xml、User
3、应用上主机之间通信方式: 同步(SYNC) | 异步(ASYNC)
4、不同主机之间空闲链路检测: idleHandler, NettyEvent机制
5、线程池设计模型图:
4、注册中心register: 注册中心作为服务提供方|服务消费方之间管理中心角色存在, 服务消费方启动时并不知道服务提供方提供哪些服务, 因此需要注册中心提供服务提供方信息以供服务消费方: Zookeeper、User
5、数据持久化: 分布式系统当用于提供消息队列、数据缓存、数据存储等功能时, 均需要提供良好的数据存储引擎:
1、RocketMq: 使用javaNIO下FileChannel对象来进行MessageExt对象持久化
2、Redis: 该分布式缓存系统为纯内存操作/单线程模式/linux下epoll提供Reactor访问, save|bgsave将内存中数据持久化至rdb文件中。
5、分布式数据索引: 建立MessageExt对象索引值, 支持MessageExt对象快速访问与定位。
2、配置参数:
1、enableConsumeQueueExt : 决定是否启用TransientStorePool对象, default = false
2、useReentrantLockWhenPutMessage: 决定是否启用ReentrantLock锁
3、filterSupportRetry : 记录在Broker服务器过滤时, 是否使用ExpressionForRetryMessageFilter对象, 对RetryGroup主题过滤时,使用originalTopic对象
4、enablePropertyFilter : 记录Broker服务器是否允许SQL92模式的过滤
5、transientStorePoolEnable : 记录Broker服务器是否启用TransientStorePool对象
3、RocketMq消息交互流程图:

4、MappFileQueue对象:

5、ConsumeQueue对象与ConsumeQueueExt对象:

6、CommitLog对象, 它是用于将MessageExt对象写入MappedFile对象, 并支持同步提交 | 异步提交, 同步刷新 | 异步刷新, 它将消息存储格式为:

8、IndexFile对象, 它是使用hash算法来解决CommitLog对象遍历, 记录其中的索引:

3、MappFile对象提交与刷新流程图:

#### 安装教程
1. xxxx
2. xxxx
3. xxxx
#### 使用说明
1. xxxx
2. xxxx
3. xxxx
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request