TMQ:定时消息队列原理与实现

TMQ

TMQ: Timing Message Queue,定时消息队列。

概念

什么是定时消息队列?

存储在队列中的消息,可以按投递时间顺序获取。

用(t,m)表示一个消息,其中t是投递时间,m是消息体,则对于先后推送至队列中的消息(t1,m1),(t1,m2),当按投递时间t1获取时,将先后获取到m1、m2。

应用场景

  • 新用户注册,第二天上午9点发放优惠券,则可以在新用户注册时推送一条定时消息,消息投递时间为第二天上午9点,消息体可以是用户ID
  • 用户下单,半小时后提醒用户付款,消息投递时间为半小时后,消息体为订单ID
  • 发起投票,截止前1小时、半小时分别提醒用户投票,则可以推送一批定时消息,每个消息携带不同的投递时间和用户ID

总的应用场景就是需要定时或延时触发的消息。

设计思路

思路1

消息存储于数据表,表中有投递时间字段,并给该字段加索引。
获取消息时按投递时间查询,并按自增ID顺序获取。
需要额外的状态字段标识消息是否已被读取。
存在的问题

  • 当一个投递时间有大量消息时,索引是低效的

思路2

在思路1的基础上,采取分表策略,基于投递时间横向拆分。
解决了索引低效的问题,按自增ID顺序获取即可。
存在的问题

  • 表数量不可控
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值