消息隊列 CMQ 延遲消息功能 - 消息隊列(Queue)模型 - 文檔中心 - 騰訊雲 https://cloud.tencent.com/document/product/406/8128
CMQ 消息定時器允許您為要添加到隊列的消息指定初始的不可見時段,稱為飛行狀態。例如,如果您發送一條消息並將 DelaySeconds 參數設置為45,則使用者在該消息進入隊列后的前45秒將看不到該消息。DelaySeconds 的默認值為0。
延遲消息設置范圍:指定 Queue 生產消息時,可增加 DelaySeconds 入參,取值范圍為0 - 3600秒,即消息最長不可見時長為1小時。若為空,則無延遲效果。
使用限制:每個隊列處於飛行狀態的消息數限制為2萬條,若隊列中處於飛行狀態的消息超過2萬條,則新生產的消息不允許消費,需要等待當前飛行狀態的消息到期才可以繼續消費。Topic 模式下該能力暫不支持。
定時和延時消息_消息類型_功能與特性_產品簡介_消息隊列 RocketMQ 版-阿里雲 https://help.aliyun.com/document_detail/43349.html
本文主要介紹消息隊列 RocketMQ 版的定時消息和延時消息的概念、適用場景以及使用過程中的注意事項。
概念介紹
- 定時消息:Producer 將消息發送到消息隊列 RocketMQ 版服務端,但並不期望立馬投遞這條消息,而是推遲到在當前時間點之后的某一個時間投遞到 Consumer 進行消費,該消息即定時消息。
- 延時消息:Producer 將消息發送到消息隊列 RocketMQ 版服務端,但並不期望立馬投遞這條消息,而是延遲一定時間后才投遞到 Consumer 進行消費,該消息即延時消息。
定時消息與延時消息在代碼配置上存在一些差異,但是最終達到的效果相同:消息在發送到消息隊列 RocketMQ 版服務端后並不會立馬投遞,而是根據消息中的屬性延遲固定時間后才投遞給消費者。
適用場景
定時消息和延時消息適用於以下一些場景:
- 消息生產和消費有時間窗口要求,例如在電商交易中超時未支付關閉訂單的場景,在訂單創建時會發送一條延時消息。這條消息將會在 30 分鍾以后投遞給消費者,消費者收到此消息后需要判斷對應的訂單是否已完成支付。如支付未完成,則關閉訂單。如已完成支付則忽略。
- 通過消息觸發一些定時任務,例如在某一固定時間點向用戶發送提醒消息。
使用方式
定時消息和延時消息的使用在代碼編寫上存在略微的區別:
- 發送定時消息需要明確指定消息發送時間點之后的某一時間點作為消息投遞的時間點。
- 發送延時消息時需要設定一個延時時間長度,消息將從當前發送時間點開始延遲固定時間之后才開始投遞。
注意事項
- 定時消息的精度會有 1s ~ 2s 的延遲誤差。
- 定時和延時消息的
msg.setStartDeliverTime
參數需要設置成當前時間戳之后的某個時刻(單位毫秒)。如果被設置成當前時間戳之前的某個時刻,消息將立刻投遞給消費者。 - 定時和延時消息的
msg.setStartDeliverTime
參數可設置 40 天內的任何時刻(單位毫秒),超過 40 天消息發送將失敗。 StartDeliverTime
是服務端開始向消費端投遞的時間。 如果消費者當前有消息堆積,那么定時和延時消息會排在堆積消息后面,將不能嚴格按照配置的時間進行投遞。- 由於客戶端和服務端可能存在時間差,消息的實際投遞時間與客戶端設置的投遞時間之間可能存在偏差。
- 設置定時和延時消息的投遞時間后,依然受 3 天的消息保存時長限制。
例如,設置定時消息 5 天后才能被消費,如果第 5 天后一直沒被消費,那么這條消息將在第 8 天被刪除。
定時和延時消息
定時和延時消息_消息類型_功能與特性_產品簡介_消息隊列 RocketMQ 版-阿里雲 https://help.aliyun.com/document_detail/43349.html
更新時間:2020-06-03 10:54:40
本文主要介紹消息隊列 RocketMQ 版的定時消息和延時消息的概念、適用場景以及使用過程中的注意事項。
概念介紹
- 定時消息:Producer 將消息發送到消息隊列 RocketMQ 版服務端,但並不期望立馬投遞這條消息,而是推遲到在當前時間點之后的某一個時間投遞到 Consumer 進行消費,該消息即定時消息。
- 延時消息:Producer 將消息發送到消息隊列 RocketMQ 版服務端,但並不期望立馬投遞這條消息,而是延遲一定時間后才投遞到 Consumer 進行消費,該消息即延時消息。
定時消息與延時消息在代碼配置上存在一些差異,但是最終達到的效果相同:消息在發送到消息隊列 RocketMQ 版服務端后並不會立馬投遞,而是根據消息中的屬性延遲固定時間后才投遞給消費者。
適用場景
定時消息和延時消息適用於以下一些場景:
- 消息生產和消費有時間窗口要求,例如在電商交易中超時未支付關閉訂單的場景,在訂單創建時會發送一條延時消息。這條消息將會在 30 分鍾以后投遞給消費者,消費者收到此消息后需要判斷對應的訂單是否已完成支付。如支付未完成,則關閉訂單。如已完成支付則忽略。
- 通過消息觸發一些定時任務,例如在某一固定時間點向用戶發送提醒消息。
使用方式
定時消息和延時消息的使用在代碼編寫上存在略微的區別:
- 發送定時消息需要明確指定消息發送時間點之后的某一時間點作為消息投遞的時間點。
- 發送延時消息時需要設定一個延時時間長度,消息將從當前發送時間點開始延遲固定時間之后才開始投遞。
注意事項
- 定時消息的精度會有 1s ~ 2s 的延遲誤差。
- 定時和延時消息的
msg.setStartDeliverTime
參數需要設置成當前時間戳之后的某個時刻(單位毫秒)。如果被設置成當前時間戳之前的某個時刻,消息將立刻投遞給消費者。 - 定時和延時消息的
msg.setStartDeliverTime
參數可設置 40 天內的任何時刻(單位毫秒),超過 40 天消息發送將失敗。 StartDeliverTime
是服務端開始向消費端投遞的時間。 如果消費者當前有消息堆積,那么定時和延時消息會排在堆積消息后面,將不能嚴格按照配置的時間進行投遞。- 由於客戶端和服務端可能存在時間差,消息的實際投遞時間與客戶端設置的投遞時間之間可能存在偏差。
- 設置定時和延時消息的投遞時間后,依然受 3 天的消息保存時長限制。
例如,設置定時消息 5 天后才能被消費,如果第 5 天后一直沒被消費,那么這條消息將在第 8 天被刪除。