本文對Message ServiceMNS的隊列模型涉及的專有名詞及術語進行定義和解析,方便您更好地理解相關概念並使用隊列模型。
Account
- 使用者的阿里雲帳號ID。
隊列(Queue)
- 訊息儲存的目的地,分成普通隊列和延時隊列兩類。訊息包含資料和屬性,可以分成普通訊息和延時訊息,在一個隊列中能唯一標識一個訊息的有Message ID和ReceiptHandle兩個參數。
普通隊列
- 如果發送訊息時不指定訊息延時,訊息發送到普通隊列後可立即被消費。
延時隊列(Delayed Queue)
- 如果發送訊息時指定了訊息延時,發送到延時隊列的訊息需要經過一定的時間後才能被取到。您可通過CreateQueue和SetQueueAttributes指定隊列的延時時間長度。
隊列所有者
- 已開通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.com
:Region
是Message ServiceMNS服務部署的地區,您可以根據應用需要選擇不同的地區。AccountId
:隊列所有者的帳號ID,調用API請求時需替換成實際的帳號ID。
- Message ServiceMNS的訪問網域名稱地址,格式如下:
普通訊息(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 ServiceMNS根據當時擷取訊息的行為產生的臨時訊息標識,這一點不同於Message ID。如需刪除已消費的訊息或者改變其VisiblityTimeout屬性值,則用ReceiptHandle指定已消費過的訊息。
訊息狀態(Message Status)
- 普通訊息狀態說明如下:
- 普通訊息發送到普通隊列時,訊息初始狀態是Active,當其被取走後在VisibilityTimeout的時間內狀態為Inactive。若超過VisibilityTimeout時間後訊息還未被刪除,訊息狀態重新變成Active;如果在VisibilityTimeout時間內被刪除,訊息狀態為Deleted。
- 普通訊息發送到延時隊列時,訊息初始狀態是Delayed,經過延時隊列的DelaySeconds屬性值設定的時間後,訊息狀態變成Active。
延時訊息狀態說明如下:
延時訊息發送到隊列(普通隊列或者延時隊列),訊息初始狀態為Delayed,經過訊息的DelaySeconds屬性值設定的時間後,訊息狀態變成Active。
訊息的最長存活時間由建立隊列時指定的MessageRetentionPeriod屬性值決定,超過此時間後訊息狀態會變成Expired,將被記憶體回收行程回收。
消費者只能取到處於Active狀態的訊息。
訊息狀態轉換示意圖如下所示:
訊息生命週期示意圖如下所示:
- 普通訊息狀態說明如下: