写点什么

模块八作业

用户头像
NewBranSTONE
关注
发布于: 3 小时前
模块八作业

作业:设计消息队列存储消息数据的 MySQL 表


设计思路以及考虑点


  1. 消息存储分为永久性消息和临时性消息。

  2. 一张表保存所有队列的消息,如果队列数量不多并且消息数量不多此方案可以,但是对于队列和消息较多的系统,如此设计将会影响数据查询、更新、插入的效率。多个消息表对应的表明 mq_xxx_msg_store。

  3. 消息处理结果需要有记录。

建表语句

--- 消息索引表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;
复制代码


用户头像

NewBranSTONE

关注

还未添加个人签名 2017.10.27 加入

还未添加个人简介

评论

发布
暂无评论
模块八作业