# 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消息交互流程图: ![Image text](https://cugxdy.oss-cn-beijing.aliyuncs.com/picture/RocketMq%E4%BA%A4%E4%BA%92%E5%9B%BE.png)
4、MappFileQueue对象: ![Image text](https://cugxdy.oss-cn-beijing.aliyuncs.com/picture/A04JP%24I7%25DVJ_08BTG_6%40O9.png)
5、ConsumeQueue对象与ConsumeQueueExt对象: ![Image text](https://cugxdy.oss-cn-beijing.aliyuncs.com/picture/5ZWG0%29%5B%40SU%7DG4%29%7E%5DNUWCKSH.png)
6、CommitLog对象, 它是用于将MessageExt对象写入MappedFile对象, 并支持同步提交 | 异步提交, 同步刷新 | 异步刷新, 它将消息存储格式为: ![Image text](https://cugxdy.oss-cn-beijing.aliyuncs.com/picture/QQGVA%40XQ%7BOI%7BGR%7EFO621%28%7DI.png)
8、IndexFile对象, 它是使用hash算法来解决CommitLog对象遍历, 记录其中的索引: ![Image text](https://cugxdy.oss-cn-beijing.aliyuncs.com/picture/%7DEKS965GX%40%28%253ADDJQO%7B%7DSU.png)
3、MappFile对象提交与刷新流程图: ![Image text](https://cugxdy.oss-cn-beijing.aliyuncs.com/picture/ONUO5%28PY3_%7B%7D1DSK%25M62G47.png)
#### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request