实现延时消息
作者:互联网
1.基于外部存储实现的方案
基于外部存储的方案本质上都是一个套路,将 MQ 和 延时模块 区分开来,延时消息模块是一个独立的服务/进程。延时消息先保留到其他存储介质中,然后在消息到期时再投递到 MQ。
1.1、基于 数据库(如MySQL)
基于关系型数据库(如MySQL)延时消息表的方式来实现。
CREATE TABLE `delay_msg` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`delivery_time` DATETIME NOT NULL COMMENT '投递时间',
`payloads` blob COMMENT '消息内容',
PRIMARY KEY (`id`),
KEY `time_index` (`delivery_time`)
)
通过定时线程定时扫描到期的消息,然后进行投递。定时线程的扫描间隔理论上就是你延时消息的最小时间精度。
1.2、基于 RocksDB
RocksDB 的方案其实就是在上述方案上选择了比较合适的存储介质
1.3、基于 Redis
2. 开源 MQ 中的实现方案
2.1、RocketMQ
2.2、Pulsar
2.3、QMQ
标签:基于,实现,投递,MQ,消息,延时,time 来源: https://www.cnblogs.com/KL2016/p/16301344.html