设计消息队列存储消息数据的 Mysql 表
【作业内容】设计消息队列存储消息数据的 MySQL 表格
【作业要求】
1.包括表名、字段、索引;
2.用文字描述设计思路和理由,例如:为什么设计某个索引?
3.一页 PPT 即可。
我觉得应该每个消息队列一张表,这样的话,入队就是简单的 insert 操作,出队就是找到没有被消费的最小 id 即可,实现起来更加方便。
问题:
有的表过大,有的表过小(使用频率)
解决:由业务考虑的时候解决,消息队列不管这种负载均衡相关
消息唯一性,以及幂等性
用消息 id 作为主键自增,然后先获取自增 id,再插入(事务保证)
消息队列已经消费的消息需不需要干掉
可以干掉,消费成功的放到另外一张表,以后要查记录就直接去另外的表
表名:mq_xx 每个队列一张表,可以直接利用表名区分
msgId: 消息 id (自增,主键)
producer_id:生产者 id
content
create_time
consumer_id
state:状态 0 未使用 1 使用中
索引:state 直接取出未使用的
表名:mq_record_xx
msgId
producer_id
consumer_id
content
create_time
consumer_time
record 表在业务上只有插入,所以根据维护运营需求,可以设置索引,在业务上不需要索引
消息队列需要取出没人用的消息,然后使用它,所以用 state 做索引,方便查询。
这里只考虑队列任务(消息处理的先后、谁处理都无关,只要消息能被处理就算成功)
评论