實現延時訊息
阿新 • • 發佈:2022-05-23
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