架构实战营模块八作业
发布于: 5 小时前
消息队列表
每个消息队列放一张表,表名 queue_{队列名称}。优点:消息存储紧凑,删除消息后造成表空洞较小,数据页利用率更高
消息唯一雪花递增 id 作为主键,可快速定位拉取的消息
消息创建时间戳做普通索引方便删除过期消息
消费位移表
消息队列名称和消费者组名称做唯一索引快速定位,更新位移的时候不会阻塞其它队列消费更新位移
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 <= '{过期时间戳}'
复制代码
划线
评论
复制
发布于: 5 小时前阅读数: 3
maybe
关注
还未添加个人签名 2019.03.25 加入
还未添加个人简介
评论