1 Star 0 Fork 1

JavaCollege/JAVA-000

forked from edgevagrant/JAVA-000 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

第十四周学习笔记


动手写MQ

工程地址:https://github.com/lw1243925457/MQ-Demo

第一个版本:内存 Queue

  • 1、基于内存Queue实现生产和消费API(已经完成)
    • 1)创建内存Queue,作为底层消息存储
    • 2)定义Topic,支持多个Topic
    • 3)定义Producer,支持Send消息
    • 4)定义Consumer,支持Poll消息

第二个版本:自定义 Queue

  • 2、去掉内存Queue,设计自定义Queue,实现消息确认和消费offset
    • 1)自定义内存Message数组模拟Queue。
    • 2)使用指针记录当前消息写入位置。
    • 3)对于每个命名消费者,用指针记录消费位置。

第三个版本:基于 SpringMVC 实现 MQServer

  • 3、拆分broker和client(包括producer和consumer)
    • 1)将Queue保存到web server端
    • 2)设计消息读写API接口,确认接口,提交offset接口
    • 3)producer和consumer通过httpclient访问Queue
    • 4)实现消息确认,offset提交
      • 单机
      • 集群
    • 5)实现consumer从offset增量拉取

第四个版本:增加多种策略(各条之间没有关系,可以任意选择实现)

  • 1)考虑实现消息过期,消息重试,消息定时投递等策略
  • 2)考虑批量操作,包括读写,可以打包和压缩
  • 2)考虑消息清理策略,包括定时清理,按容量清理等
  • 3)考虑消息持久化,存入数据库,或WAL日志文件,或BookKeeper
  • 4)考虑将spring mvc替换成netty下的tcp传输协议

第五个版本:体系完善 MQ

  • 5、对接各种技术(各条之间没有关系,可以任意选择实现)
    • 1)考虑封装 JMS 1.1 接口规范
    • 2)考虑实现 STOMP 消息规范
    • 3)考虑实现消息事务机制与事务管理器
    • 4)对接Spring
    • 5)对接Camel或Spring Integration
    • 6)优化内存和磁盘的使用
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/JavaCollege/JAVA-000.git
git@gitee.com:JavaCollege/JAVA-000.git
JavaCollege
JAVA-000
JAVA-000
main

搜索帮助