gmq

module
v0.0.0-...-7788d34 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 27, 2024 License: Apache-2.0

README

gmq

Distribute Message Queue written in Golang.

Design

实现一个最基础的模型

producer 可以连接 broker 发送消息 broker 收到消息把消息先放在内存队列中 consumer 连接到 broker 进行消费,记录 offset

技术选型

  • 通信协议
  • 服务端

方案1:http + json-rpc + web server 方案2: tcp + proto buf + gRPC 方案3: tcp + 自定义协议 + 自研 Server

迭代

  1. 基于内存Queue实现生产和消费API(已经完成)

    1)创建内存Queue,作为底层消息存储 2)定义Topic,支持多个Topic 3)定义Producer,支持Send消息 4)定义Consumer,支持Poll消息

  2. 去掉内存Queue,设计自定义Queue,实现消息确认和消费offset

    1)自定义内存Message数组模拟Queue。 2)使用指针记录当前消息写入位置。 3)对于每个命名消费者,用指针记录消费位置。

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

  4. 增加多种策略 (各条之间没有关系, 可以任意选择实现)

1)考虑实现消息过期,消息重试,消息定时投递等策略

2)考虑批量操作,包括读写,可以打包和压缩

2)考虑消息清理策略,包括定时清理,按容量清理等

3)考虑消息持久化,存入数据库,或WAL日志文件,或BookKeeper

4)考虑将spring mvc替换成netty下的tcp传输协议

5、对接各种技术(各条之间没有关系,可以任意选择实现)

1)考虑封装 JMS 1.1 接口规范 2)考虑实现 STOMP 消息规范 3)考虑实现消息事务机制与事务管理器 4)对接Spring 5)对接Camel或Spring Integration 6)优化内存和磁盘的使用

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL