1. 程式人生 > 其它 >實現延時訊息

實現延時訊息

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