设计消息队列存储消息数据的 MySQL 表格
数据模型设计
为了读写、数据容量的扩展性,节省消息类型索引,数据表定性为一个消息队列对应一张表。
表 topic
字段
id 主键 AUTO_INCREMENT UNSIGNED INT NOT NULL
content varchar(250) NOT NULL
create_time DATETIME
key time_index ("create_time")
预留一些时间范围查找、时间排序,索引留下创建时间的索引
表元数据统一管理
表 topic_md
这种表通常是全表在内存中,故不涉及主键,mysql 有个隐性主键
name varchar(100) NOT NULL 消息队列名称
type tinyint 消息队列的使用模式,如 p2p、订阅(默认)
retention int 表示保留时间
消息队列位移管理
表 topic_offset
字段
id 主键 AUTO_INCREMENT INT NOT NULL
name varchar(100) NOT NULL 消息队列名称
customer_id varchar(100) NOT NULL 消费者 id,消费端程序手动设置全局唯一性
offset 读取的消息偏移
unique index topic_customer_index(name, customer_id)
操作接口说明
create_topic 接口,参数:a. 全局唯一性 topic 名称,b. 指定消息模式(默认订阅模式)
producer_send 接口 参数:a. 全局唯一性 topic 名称,b. 消息内容
customer_poll 接口 参数:a. 全局唯一性 topic 名称,b. 消费端程序手动设置全局唯一的 customer id
消费者可以一次性拉取多条(可在创建消费者时指定),消息队列位移偏移量可以一次性偏移多条已读取的消息数。
评论