# mq **Repository Path**: hsyj/mq ## Basic Information - **Project Name**: mq - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-04-18 - **Last Updated**: 2023-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 手写MQ #### 介绍 本项目仿造RocketMQ,旨在学习理解mq的基本设计思路 #### 项目模块说明 - mq-store:负责mq的持久化,使用mmap,filechannel,pagecache等技术,实现了Consume queue,Commit Log,Index file文件。 - mq-rpc:负责mq的通信,主要是client和broker,raft的通信。 - mq-broker:作为mq的tcp服务器,提供消息发送,消息拉取,消息ack,查找topic路由信息等功能,存取消息则会调用模块store。 - mq-client:作为mq的tcp客户端,为用户提供操作api并与broker交互。 - mq-common:mq的公共模块,存放一些工具类,msg,topic实体,spi等。 - mq-filter:mq的过滤模块,负责消息tag,sql过滤。 - mq-register:mq的注册中心模块,RocketMQ采取的是使用NameSrv作为注册中心,这里我们不自研了,直接使用第三方zk,若broker单机部署其实不必使用注册中心。 - mq-raft:mq的分布式模块,负责自动选主,自动切主 - mq-example:mq的例子,包含基础消息,延迟消息,顺序消息,tag,sql过滤消息,暂不支持事务消息 - mq-spring:mq接入spring - mq-user:mq接入spring的生产者使用例子 - mq-points:mq接入spring的消费者使用例子 #### 源码启动 1.单机broker启动,无需zk 启动类:com.lry.BrokerStartup 测试类:lry.basic.BasicProducer,lry.basic.BasicConsumer 2.分布式raft broker启动,需要zk(默认localhost:2181) 启动类:com.lry.RaftBrokerStartup 测试类:lry.raft.BasicProducer,lry.raft.BasicConsumer #### 项目截图 1.单机broker ![输入图片说明](https://foruda.gitee.com/images/1669173373504198485/3ef3464d_1367820.png "屏幕截图") mq-user作为生产者,配置如下 ![输入图片说明](https://foruda.gitee.com/images/1669173467555993911/a8a18ba3_1367820.png "屏幕截图") ![输入图片说明](https://foruda.gitee.com/images/1669173645776047586/f935ecdf_1367820.png "屏幕截图") mq-points作为消费者 ![输入图片说明](https://foruda.gitee.com/images/1669173936375477108/afd862db_1367820.png "屏幕截图") 2.分布式raft broker ![输入图片说明](https://foruda.gitee.com/images/1669173061683312679/81a0abea_1367820.png "屏幕截图") ![输入图片说明](https://foruda.gitee.com/images/1669173234148874395/2ef62ab0_1367820.png "屏幕截图") ![输入图片说明](https://foruda.gitee.com/images/1669173305647536667/aef9fa36_1367820.png "屏幕截图")