写点什么

模块八

作者:撿破爛ぃ
  • 2022 年 2 月 26 日
  • 本文字数:874 字

    阅读完需:约 3 分钟

说明:

1、总个消息队列设计为一个总的数据库,不做一个 broker 对应一个库的设计,

2、消息队列做分布式部署时,不同的 broker 上会存在同一个 topic

3、为防止一个队列(queue)上数据过多,设计为一个 queue 对应多个消息表

4、由于同一个 queue 有多个消息表,因此需要记录消息的消费位置

表设计如下

1、主题表 一个主题对应多个 broker

CREATE TABLE topic (	  id BINARY(16) NOT NULL,  -- 主题id  topic_name VARCHAR(255) NOT NULL,  -- 主题名称  broker_id BINARY(16) NOT NULL,   -- 主题对应的broker  create_time TIMESTAMP NOT NULL ,  -- 创建时间  modify_time TIMESTAMP NOT NULL ,  -- 修改时间  PRIMARY KEY(id));
复制代码

2、队列表,一个 topic 对应多个 queue

CREATE TABLE queue(  id BINARY(16) NOT NULL, -- 队列ID  name VARCHAR(255) NOT NULL, -- 队列名称  topic_id BINARY(16) NOT NULL, -- 主题id  message_table_name VARCHAR(255) NOT NULL,  -- 消息表表名  create_time TIMESTAMP NOT NULL ,  -- 创建时间  modify_time TIMESTAMP NOT NULL ,  -- 修改时间  PRIMARY KEY(id),  INDEX idx_topic(topic_id) --便于查询消费表);
复制代码

3、消息表 一个队列表对应一个消息表

CREATE TABLE queue_message(  id BINARY(16) NOT NULL, -- 消息ID  queue_id BINARY(16) NOT NULL, -- 队列ID  message_data JSON, -- 使用JSON数据类型保存消息数据  state NOT NULL, -- 消息消费状态  create_time TIMESTAMP NOT NULL ,  -- 创建时间  modify_time TIMESTAMP NOT NULL ,  -- 修改时间  PRIMARY KEY (ID));
复制代码

4、消息最新消费位置表

CREATE TABLE queue_message_consumer(  id BINARY(16) NOT NULL,   queue_id BINARY(16) NOT NULL, -- 队列id  message_id BINARY(16) NOT NULL, -- 消息ID  message_table_name VARCHAR(255) NOT NULL,  -- 消息表表名  state NOT NULL, -- 消息消费状态  create_time TIMESTAMP NOT NULL ,  -- 创建时间  modify_time TIMESTAMP NOT NULL ,  -- 修改时间  PRIMARY KEY (ID),  INDEX idx_queue(queue_id) --便于查询消费位置);
复制代码


用户头像

撿破爛ぃ

关注

还未添加个人签名 2018.04.20 加入

还未添加个人简介

评论

发布
暂无评论
模块八