基本概念
Account
Account 是阿里云的注册用户,在 MNS 中以阿里云注册帐号的 ID 表示(形式为的16 位数字串)。
队列所有者
开通 MNS 服务的 Account 通过 CreateQueue 接口创建出一个消息队列,这个Account 就是这个消息队列的所有者, 消息队列所有者拥有此消息队列的所有操作权限。消息队列所有者对应的Account ID在阿里云官网的用户中心可以查看。
生产者、消费者
生产者,向 MNS 的消息队列发送消息的角色。
消费者,从 MNS 的消息队列获取消息的角色。
Queue
消息队列是消息存储的目的地,消息队列可以分成普通消息队列和延时消息队列两类。 如果发送消息时不指定消息延时参数,被发送到普通消息队列的消息立刻可以被消费,而发送到延时消息队列需要经过设定的延时时间后才能被消费。
QueueURL 是标识 Queue 的 URL, 格式如下: http://$AccountId.mns.
.aliyuncs.com/queues/$QueueName
- mns.
.aliyuncs.com: MNS 访问域名, Region 是 MNS 部署的 区域,用户可以根据应用需要选择不同的地域. - AccountId: 表示消息队列所有者的帐号 ID,实际调用 MNS 的 API 时请替换成实际的帐号 ID.
- QueueName: 表示消息队列的名称, MNS 使用者在实际调用 API 的 过程中替换成实际消息队列名称,同一个AccountId在同 Region 中的 消息队列名不能重名.
Message
消息包含数据和属性,消息可以分成普通消息和延时消息,在一个消息队列中能唯一标识一个消息的有 MessageId 和 ReceiptHandle 两种。
普通消息、延时消息
消息主要分成普通消息和延时消息,普通消息是指被发送到消息队列马上可 以被取到的消息;延时消息是指消息发送到队列后需要经过一定的时间后才能被取到的消息,延时时长由 DelaySeconds 属性定(请参考 SendMessage 相关属性定)。
普通消息被发送到延时消息队列也具有延时特性(请参考 Queue 相关章节)。
MessageId
MessageId 主要用来标识在消息队列中的一个消息,在一个消息队列中每个 消息都有唯一的 MessageId, 但在不同的消息队列之中并不唯一。
当消息发送到 MNS 消息队列, MNS 会生成一个 MessageId,此 ID 一旦产 生就不会改变, 并在请求响应中返回,用户主要可以使用此 MessageId 来做数据校对,但是删除消息必须使用 ReceiptHandle。
ReceiptHandle
ReceiptHandle 是由MNS根据当时获取消息的行为产生的临时性消息标识,这一点不同于 MessageId。 当要删除已消费的消息或者改变其VisiblityTimeout 属性值,需要用 ReceiptHandle 指定已消费过的消息。 ReceiptHandle 只能被使用一次, 如果 ReceiptHandle 标识的消息状态改变其就会失效,消费者只有通过获取消息后重新获取 ReceiptHandle 才能进行上述操作。
Message Status
普通消息被发送到普通消息队列时, 初始状态是 Active,当其被取走后在 VisibilityTimeout 的时间内状态为 Inactive,若超过 VisibilityTimeout 时间后消息还未被删除,消息会重新变成Active状态;如果在VisibilityTimeout 时间内被删除, 消息状态为 Deleted。
普通消息发送到延时消息队列时, 消息初始状态 Delayed,经过延时消息队 列的 DelaySeconds 属性值设定的时间后,消息状态变成 Active。
延时消息发送到消息队列(普通消息队列或者延时消息队列),消息的初始 状态为 Delayed,经过消息的 DelaySeconds 属性指定的时间后消息状态变成 Active。
消息的最长存活时间由创建消息队列时指定的 MessageRetentionPeriod 属性值决定, 超过此时间后消息状态会变成 Expired,将被垃圾回收器回收。
消费者只能取到处于 Active 状态的消息。