文档

队列模型基本概念

更新时间:

本文对轻量消息队列(原 MNS)的队列模型涉及的专有名词及术语进行定义和解析,方便您更好地理解相关概念并使用队列模型。

  • Account

    • 用户的阿里云账号ID。
  • 队列(Queue)

    • 消息存储的目的地,分成普通队列和延时队列两类。消息包含数据和属性,可以分成普通消息和延时消息,在一个队列中能唯一标识一个消息的有Message ID和ReceiptHandle两个参数。
  • 普通队列

    • 如果发送消息时不指定消息延时,消息发送到普通队列后可立即被消费。
  • 延时队列(Delayed Queue)

    • 如果发送消息时指定了消息延时,发送到延时队列的消息需要经过一定的时间后才能被取到。您可通过CreateQueueSetQueueAttributes指定队列的延时时长。
  • 队列所有者

    • 已开通轻量消息队列(原 MNS)的Account通过CreateQueue接口创建出一个消息队列,这个Account就是该队列的所有者。队列所有者拥有此队列的所有操作权限。队列所有者对应的Account ID可以在阿里云官网查看。
  • 生产者(Producer)

    • 轻量消息队列(原 MNS)的消息队列发送消息的角色。
  • 消费者(Consumer)

    • 轻量消息队列(原 MNS)的消息队列获取消息的角色。
  • Endpoint

    • 轻量消息队列(原 MNS)的访问域名地址,格式如下:

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

      • mns.<Region>.aliyuncs.comRegion轻量消息队列(原 MNS)服务部署的地域,您可以根据应用需要选择不同的地域。
      • AccountId:队列所有者的账号ID,调用API请求时需替换成实际的账号ID。
  • 普通消息(Message)

    • 被发送到队列且立即可以被取到的消息。
  • 延时消息(Delayed Message)

    • 消息发送到队列后需要经过一定的时间后才能被取到的消息,延时时长由DelaySeconds属性决定。详情请参见SendMessage
  • 消息ID(Message ID)

    • 标识在队列中的一条消息,在一个队列中每条消息都有唯一的Message ID,但在不同队列之间并不唯一。当消息发送到轻量消息队列(原 MNS)的队列,轻量消息队列(原 MNS)会生成一个Message ID,此ID一旦产生就不会改变,并在请求响应中返回,您主要可以使用此Message ID来做数据校对,但是删除消息必须使用ReceiptHandle。
  • 临时句柄(ReceiptHandle)

    • 轻量消息队列(原 MNS)根据当时获取消息的行为产生的临时消息标识,这一点不同于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状态的消息。

      消息状态转换示意图如下所示:

      消息状态

      消息生命周期示意图如下所示:

      消息生命周期