写点什么

架构实战营模块八作业

用户头像
maybe
关注
发布于: 5 小时前
架构实战营模块八作业

消息队列表

  1. 每个消息队列放一张表,表名 queue_{队列名称}。优点:消息存储紧凑,删除消息后造成表空洞较小,数据页利用率更高

  2. 消息唯一雪花递增 id 作为主键,可快速定位拉取的消息

  3. 消息创建时间戳做普通索引方便删除过期消息

消费位移表

  1. 消息队列名称和消费者组名称做唯一索引快速定位,更新位移的时候不会阻塞其它队列消费更新位移


create table `queue_{队列名称}`(    `id`         bigint        not null comment '消息唯一雪花递增id',    `header`     varchar(512)  not null comment '消息头:描述消息特性',    `body`       varchar(1024) not null comment '消息体:消息内容',    `t_created`  bigint        not null comment '消息创建时间戳',    `t_modified` bigint        null comment '消息修改时间戳',    primary key (`id`),    key (`t_created`)) engine = innodb;
create table `consumer_offset`( `id` bigint not null comment '消息唯一雪花递增id', `queue_name` varchar(64) not null comment '队列名称', `group_name` varchar(64) not null comment '消费者组名称', `offset_id` varchar(11) not null comment '消费位移id', `t_created` bigint not null comment '消息创建时间戳', `t_modified` bigint null comment '消息修改时间戳', primary key (`id`), unique key (`queue_name`, `group_name`)) engine = innodb;
-- 拉取消息select * from `queue_{队列名称}` where id > 'offset_id' limit 10;
-- 更新消费位移update `consumer_offset` set offset_id = 1 where queue_name = '{队列名称}' and group_name = '{消费者组名称}';
-- 删除过期消息delete from `queue_{队列名称}` where t_created <= '{过期时间戳}'
复制代码


用户头像

maybe

关注

还未添加个人签名 2019.03.25 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块八作业