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 | 訊息層級的延遲設定優先於隊列層級的延遲設定生效。 例如設定隊列
|
情境二 | 等於0或為空白 | 大於0 | 訊息將按照隊列的 |
延時訊息生命週期
相較於普通訊息,延時訊息多了一個定時中的狀態:
定時中:訊息發送到服務端,還未到延時結束時間,此時訊息處於定時中狀態,對所有消費者不可見。
訊息可見:延時時間結束後,訊息對所有消費者可見,等待消費者消費的狀態。
訊息不可見:消費者接收了一條訊息後,這條訊息會進入不可見狀態,意味著其他消費者在此期間無法接收到這條訊息。
訊息刪除:消費者成功消費完訊息,調用刪除介面後,訊息被刪除。
監控警示項
對於定時中的訊息,Simple Message Queue (formerly MNS)提供了定時中的訊息量(NumberOfMessagesDelayed)的警示項,詳情請參見監控項說明。