全部產品
Search
文件中心

Simple Message Queue (formerly MNS):隊列模型基本概念

更新時間:Jun 30, 2024

本文對Message ServiceMNS的隊列模型涉及的專有名詞及術語進行定義和解析,方便您更好地理解相關概念並使用隊列模型。

  • Account

    • 使用者的阿里雲帳號ID。
  • 隊列(Queue)

    • 訊息儲存的目的地,分成普通隊列和延時隊列兩類。訊息包含資料和屬性,可以分成普通訊息和延時訊息,在一個隊列中能唯一標識一個訊息的有Message ID和ReceiptHandle兩個參數。
  • 普通隊列

    • 如果發送訊息時不指定訊息延時,訊息發送到普通隊列後可立即被消費。
  • 延時隊列(Delayed Queue)

    • 如果發送訊息時指定了訊息延時,發送到延時隊列的訊息需要經過一定的時間後才能被取到。您可通過CreateQueueSetQueueAttributes指定隊列的延時時間長度。
  • 隊列所有者

    • 已開通Message ServiceMNS的Account通過CreateQueue介面建立出一個訊息佇列,這個Account就是該隊列的所有者。隊列所有者擁有此隊列的所有操作許可權。隊列所有者對應的Account ID可以在阿里雲官網查看。
  • 生產者(Producer)

    • Message ServiceMNS的訊息佇列發送訊息的角色。
  • 消費者(Consumer)

    • Message ServiceMNS的訊息佇列擷取訊息的角色。
  • Endpoint

    • Message ServiceMNS的訪問網域名稱地址,格式如下:

      http://$AccountId.mns.$Region.aliyuncs.com

      • mns.<Region>.aliyuncs.comRegionMessage ServiceMNS服務部署的地區,您可以根據應用需要選擇不同的地區。
      • AccountId:隊列所有者的帳號ID,調用API請求時需替換成實際的帳號ID。
  • 普通訊息(Message)

    • 被發送到隊列且立即可以被取到的訊息。
  • 延時訊息(Delayed Message)

    • 訊息發送到隊列後需要經過一定的時間後才能被取到的訊息,延時時間長度由DelaySeconds屬性決定。詳情請參見SendMessage
  • 訊息ID(Message ID)

    • 標識在隊列中的一條訊息,在一個隊列中每條訊息都有唯一的Message ID,但在不同隊列之間並不唯一。當訊息發送到Message ServiceMNS的隊列,Message ServiceMNS會產生一個Message ID,此ID一旦產生就不會改變,並在請求響應中返回,您主要可以使用此Message ID來做資料校對,但是刪除訊息必須使用ReceiptHandle。
  • 臨時控制代碼(ReceiptHandle)

    • Message ServiceMNS根據當時擷取訊息的行為產生的臨時訊息標識,這一點不同於Message ID。如需刪除已消費的訊息或者改變其VisiblityTimeout屬性值,則用ReceiptHandle指定已消費過的訊息。

      ReceiptHandle只能被使用一次,如果ReceiptHandle標識的訊息狀態改變其就會失效,消費者只有通過擷取訊息後重新擷取ReceiptHandle才能進行上述操作。

  • 訊息狀態(Message Status)

    • 普通訊息狀態說明如下:
      • 普通訊息發送到普通隊列時,訊息初始狀態是Active,當其被取走後在VisibilityTimeout的時間內狀態為Inactive。若超過VisibilityTimeout時間後訊息還未被刪除,訊息狀態重新變成Active;如果在VisibilityTimeout時間內被刪除,訊息狀態為Deleted。
      • 普通訊息發送到延時隊列時,訊息初始狀態是Delayed,經過延時隊列的DelaySeconds屬性值設定的時間後,訊息狀態變成Active。

      延時訊息狀態說明如下:

      延時訊息發送到隊列(普通隊列或者延時隊列),訊息初始狀態為Delayed,經過訊息的DelaySeconds屬性值設定的時間後,訊息狀態變成Active。

      訊息的最長存活時間由建立隊列時指定的MessageRetentionPeriod屬性值決定,超過此時間後訊息狀態會變成Expired,將被記憶體回收行程回收。

      消費者只能取到處於Active狀態的訊息。

      訊息狀態轉換示意圖如下所示:

      訊息狀態

      訊息生命週期示意圖如下所示:

      訊息生命週期