全部產品
Search
文件中心

Simple Message Queue (formerly MNS):延時訊息

更新時間:Jan 07, 2025

Simple Message Queue (formerly MNS)提供隊列層級和訊息層級的延時功能,本文為您介紹延時功能的典型應用情境、生效規則和使用方法。

應用情境

典型情境一:分布式定時調度

在分布式定時調度情境下,需要實現各類精度的定時任務,例如每天05:00執行檔案清理,每隔2分鐘觸發一次訊息推送等需求。傳統基於資料庫的定時調度方案在分布式情境下效能不高、實現複雜。基於Simple Message Queue (formerly MNS)的延時訊息可以封裝出多種類型的定時觸發器。

典型情境二:任務逾時處理

以電商交易情境為例,訂單下單後暫未支付,此時不可以直接關閉訂單,而是需要等待一段時間後才能關閉訂單。使用Simple Message Queue (formerly MNS)延時訊息可以實現逾時任務的檢查觸發。

基於延時訊息的逾時任務處理具備如下優勢:

  • 精度高、開發門檻低:基於訊息通知方式不存在定時階梯間隔。可以輕鬆實現任意精度事件觸發,無需業務去重。

  • 高效能可擴充:傳統的資料庫掃描方式較為複雜,需要頻繁調用介面掃描,容易產生效能瓶頸。Simple Message Queue (formerly MNS)的定延時訊息具有高並發和水平擴充的能力。

功能說明

Simple Message Queue (formerly MNS)提供隊列層級和訊息層級的延時功能。

隊列層級延時訊息

建立隊列時,設定訊息延時時間(DelaySeconds)屬性值,發送到本隊列的所有訊息預設將以本參數指定的時間被延後消費。

  • 單位:秒。

  • 取值:0~604800秒,即0秒至7天。

訊息層級延時訊息

建立訊息時,設定訊息延時時間(DelaySeconds)屬性值,這條訊息將以本參數指定的時間被延後消費。

  • 單位:秒。

  • 取值:0~604800秒,即0秒至7天。

設定生效規則

當訊息的DelaySeconds值大於0時,訊息層級的延遲設定優先於隊列層級的延遲設定生效,這意味著,當一條訊息具有特定的延遲屬性時,該屬性將覆蓋隊列配置中定義的延遲策略。

詳細規則如下表所示:

情境

訊息的DelaySeconds值

隊列的DelaySeconds值

生效規則

情境一

大於0

大於等於0

訊息層級的延遲設定優先於隊列層級的延遲設定生效。

例如設定隊列Queue-ADelaySeconds為600秒:

  • 如果發送到隊列Queue-A的訊息Message1DelaySeconds設定為30秒,則延時的生效值是30秒,訊息會在30秒後被消費者可見。

  • 如果發送到隊列Queue-A的訊息Message1DelaySeconds設定為1200秒,則延時的生效值是1200秒,訊息會在1200秒後被消費者可見。

情境二

等於0或為空白

大於0

訊息將按照隊列的DelaySeconds值延遲投遞。

延時訊息生命週期

相較於普通訊息,延時訊息多了一個定時中的狀態:

  • 定時中:訊息發送到服務端,還未到延時結束時間,此時訊息處於定時中狀態,對所有消費者不可見。

  • 訊息可見:延時時間結束後,訊息對所有消費者可見,等待消費者消費的狀態。

  • 訊息不可見:消費者接收了一條訊息後,這條訊息會進入不可見狀態,意味著其他消費者在此期間無法接收到這條訊息。

  • 訊息刪除:消費者成功消費完訊息,調用刪除介面後,訊息被刪除。

監控警示項

對於定時中的訊息,Simple Message Queue (formerly MNS)提供了定時中的訊息量(NumberOfMessagesDelayed)的警示項,詳情請參見監控項說明