QueueMessage是指使用者發送訊息到隊列。發送訊息時可以指定訊息體、訊息延時時間長度、訊息優先順序。本文介紹隊列訊息的訊息屬性、訊息類型、訊息狀態。
訊息屬性
MessageId
訊息編號。
(batch) send message、receive message和peek message操作返回該屬性。
一個隊列中每個訊息都有唯一的MessageId。
訊息發送到隊列中,輕量訊息佇列(原 MNS)會產生一個MessageId,該編號一旦產生就不會變化,可以用來做資料校對。
NextVisibleTime
訊息下次可被消費的時間,從1970-01-01 00:00:00 000開始的毫秒數。
(batch) receive message和change message visibility操作返回該屬性。
ReceiptHandle
訊息臨時控制代碼。
(batch) receive message和change message visibility操作返回該屬性。
該控制代碼用於刪除和修改處於Inactive狀態的訊息,NextVisibleTime之前有效,超過該時間使用控制代碼,輕量訊息佇列(原 MNS)會提示MessageNotExist。
訊息臨時控制代碼只能使用一次,如果該控制代碼標識的訊息狀態發生改變,該控制代碼就會失效。
MessageBody
訊息本文。
(batch) receive message和peek message操作返回該屬性。
MessageBodyMD5
訊息本文的MD5值。
(batch) send message、receive message和peek message操作返回該屬性。
EnqueueTime
訊息發送到隊列的時間,從1970-01-01 00:00:00 000開始的毫秒數。
(batch) receive message和peek message操作返回該屬性。
FirstDequeueTime
訊息第一次被消費的時間,從1970-01-01 00:00:00 000開始的毫秒數。
(batch) receive message和peek message操作返回該屬性。
如果訊息從未被消費過,該屬性與EnqueueTime相同。
DequeueCount
訊息總共被消費的次數,即被receive的次數。
(batch) receive message和peek message操作返回該屬性。
Priority
訊息的優先順序權值,取值範圍是1~16,其中1是最高優先順序。
(batch) receive message和peek message操作返回該屬性。
如果隊列中有不同優先順序的訊息,優先順序越高的訊息越容易更早被消費,即被ReceiveMessage操作取出。
輕量訊息佇列(原 MNS)會盡量讓高優先順序的訊息先出隊列,正是因為分布式訊息佇列的一些特性不能百分之百保證高優先順序的訊息先被消費。
訊息類型
延時訊息
這類訊息發送到隊列後,需要經過DelaySeconds指定的時間後才可被消費。
發送(batch)send message請求時指定或者配置隊列的DelaySeconds屬性。
訊息狀態
普通訊息被發送到普通隊列時,初始狀態是Active,當其被取走後在VisibilityTimeout的時間內狀態為Inactive。若超過VisibilityTimeout時間後訊息未被刪除,訊息會重新變成Active狀態;如果在VisibilityTimeout時間內被刪除, 訊息狀態變為Deleted。
普通訊息發送到延時隊列時,訊息初始狀態Delayed,經過延時隊列的DelaySeconds屬性值設定的時間後,訊息狀態變成Active。
延時訊息發送到訊息佇列(普通隊列或者延時隊列),訊息的初始狀態為Delayed,經過訊息的DelaySeconds屬性指定的時間後訊息狀態變成Active。
訊息的最長存活時間由建立隊列時指定的MessageRetentionPeriod屬性值決定,超過此時間後訊息狀態會變成Expired,將被記憶體回收行程回收。
消費者只能取到處於Active狀態的訊息。