實現延時訊息

2022-10-11 10:39:10 字數 626 閱讀 6446

基於外部儲存的方案本質上都是乙個套路,將 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、基於 redis2.1、rocketmq

2.2、pulsar

2.3、qmq

MQ如何實現訊息延時

很多時候,業務有 在一段時間之後,完成乙個工作任務 的需求。例如 滴滴打車訂單完成後,如果使用者一直不評價,48小時後會將自動評價為5星。一般來說怎麼實現這類 48小時後自動評價為5星 需求呢?常見方案 啟動乙個cron定時任務,每小時跑一次,將完成時間超過48小時的訂單取出,置為5星,並把評價狀態...

延時訊息大致設計

延時訊息,顧名思義就是傳送訊息後延遲多少時間接收。使用場景舉例,例如使用者買票後,出票後要給使用者發乙個反現金紅包,但是出票一般是非同步出票,所以我們可以設定乙個最大時間,例如30分鐘。在買票30分鐘後,根據出票結果決定是否發反現金紅包。此時就可以使用延時佇列,在使用者購票的時候傳送乙個30分鐘的延...

Redis實現非同步訊息佇列與延時佇列

說道訊息佇列,你肯定會想到kafka rabbitmq等訊息中介軟體,這些專業的訊息中介軟體提供了很多功能特性,當然他的部署使用維護都是比較麻煩的。如果你對訊息佇列沒那麼高要求,想要輕量級的,使用redis就沒錯啦。redis通過list資料結構來實現訊息佇列.主要使用到如下命令 廢話補不多說上 r...