自研消息队列之消息队列数据库表设计
总体架构
概要描述
Java 语言编写消息队列服务器;
消息存储采用 MySQL;
SDK 轮询服务器进行消息写入;
SDK 轮询服务器进行消息读取;
MySQL 双机保证消息尽量不丢;
使用 Netty 自定义消息格式,并且支持 HTTP 接口。
数据库表设计
思考:需要考虑每个消息队列一张表,还是所有消息放一张表,里面加一个“队列名称”的字段?
考虑到 mysql 单表性能,这里采用每个队列一个表,表明是队列名称
发送消息
消息服务器接收发送消息的参数:队列名称,消息内容;
消息服务器根据队列名称找到表(如果未找到则新创建一个表),将消息内容保存一条新的记录;
消息发送失败,轮询到下一个节点重新发送消息;
消费消息
轮询从每个节点拉取消息,读取指定消息队列(按创建时间正序排列)的消费时间为空的第一条数据;
消费成功通知消息服务器,更新消费成功消息的消费时间
评论