模块八作业
发布于: 3 小时前
作业:设计消息队列存储消息数据的 MySQL 表
设计思路以及考虑点
消息存储分为永久性消息和临时性消息。
一张表保存所有队列的消息,如果队列数量不多并且消息数量不多此方案可以,但是对于队列和消息较多的系统,如此设计将会影响数据查询、更新、插入的效率。多个消息表对应的表明 mq_xxx_msg_store。
消息处理结果需要有记录。
建表语句
--- 消息索引表
CREATE TABLE `mq_queue_index` (
`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`type` int(3) DEFAULT NULL COMMENT '消息类型:1-临时消息存储;2-持久化消息存储',
`store_table_name` varchar(255) DEFAULT NULL COMMENT '保存消息表的表名称',
`store_id_index` bigint(32) DEFAULT NULL COMMENT '关联存储消息表的主键id',
`store_location` varchar(255) DEFAULT NULL COMMENT '消息存储地点',
`create_time` datetime DEFAULT NULL COMMENT '队列创建时间',
`create_emp` bigint(32) DEFAULT NULL COMMENT '创建队列用户',
`name` varchar(255) DEFAULT NULL COMMENT '队列名称',
`route_key` bigint(32) DEFAULT NULL COMMENT '关联的路由id',
`update_time` datetime DEFAULT NULL COMMENT '队列更新时间',
`update_emp` bigint(32) DEFAULT NULL COMMENT '更新队列用户',
PRIMARY KEY (`id`),
KEY `store_index` (`store_id_index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='队列索引表';
--- 消息存储表
CREATE TABLE `mq_msg_store` (
`id` bigint(32) NOT NULL COMMENT '自增主键',
`store_data` varchar(2048) DEFAULT NULL COMMENT '存储的消息',
`create_time` datetime DEFAULT NULL,
`consume_time` datetime DEFAULT NULL,
`iz_ack` tinyint(1) DEFAULT '0' COMMENT '消息是否已经被确定,0-没有;1-确定',
`iz_consume` tinyint(1) DEFAULT '0' COMMENT '消息是否被消费。0-没有被消费;1-被消费',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--- 消息处理记录表
CREATE TABLE `mq_queue_result_log` (
`id` bigint(32) NOT NULL AUTO_INCREMENT,
`queue_id` bigint(32) DEFAULT NULL COMMENT '关联 mq_queue_index',
`consume_id` bigint(32) DEFAULT NULL COMMENT '消费者id',
`result` int(2) DEFAULT NULL COMMENT '处理结果',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
划线
评论
复制
发布于: 3 小时前阅读数: 3
NewBranSTONE
关注
还未添加个人签名 2017.10.27 加入
还未添加个人简介
评论