阿里云消息服务(Message Service)-基本概念

Account

Account 是阿里云的注册用户,在 MNS 中以阿里云注册帐号的 ID 表示。

队列模型

队列所有者

开通 MNS 服务的 Account 通过 CreateQueue 接口创建出一个消息队列,这个 Account 就是这个队列的所有者,队列所有者拥有此队列的所有操作权限。队列所有者对应的Account ID在阿里云官网可以查看。

生产者、消费者

生产者,向 MNS 的消息队列发送消息的角色。
消费者,从 MNS 的消息队列获取消息的角色。

主题模型

主题所有者

开通 MNS 服务的 Account 通过 CreateTopic 接口创建出一个主题,这个 Account 就是该主题的所有者,主题所有者拥有该主题的所有操作权限。

发布者、订阅者

发布者,向 MNS 的主题发布消息的角色。
订阅者,从 MNS 的主题接收消息的角色。

Queue

队列是消息存储的目的地,队列可以分成普通队列和延时队列两类。
如果发送消息时不指定消息延时参数,被发送到普通队列的消息立刻可以被消费,而发送到延时队列需要经过设定的延时时间后才能被消费。

队列属性

DelaySeconds

消息延迟时间,单位为秒;
取值范围:0 ~ 604800秒(7天);
当该属性大于0时,发送到队列的所有消息是延迟消息,经过该属性指定的秒数后变为可消费消息;
如果发送消息请求指定了DelaySeconds,以请求指定的DelaySeconds为准;

MaximumMessageSize

消息体最大长度,单位为Byte;
取值范围:1024 ~ 65536Byte(64KB);
该属性用于限制发送到队列的消息体最大长度,超过该长度发送消息失败;

MessageRetentionPeriod

消息最长保留时间,单位为秒;
取值范围:60 ~ 1296000秒(15天);
发送到队列的消息最长保留该时长,超过指定时间,无论消息是否被消费都将被删除;

VisibilityTimeout

消息被receive后的隐藏时长,单位为秒;
取值范围:1 ~ 43200秒(12小时);
消息被receive后,在该属性指定的这段时间内消息处于隐藏状态,在这段时间内,可以删除消息或者修改消息隐藏时长;超过这段时间,消息可以再次被receive;

PollingWaitSeconds

(batch)receive message请求最长等待时间,单位为秒;
取值范围:0 ~ 30秒;
当队列中没有消息时,(batch)receive message请求将挂在 MNS 服务器端;在该属性指定的时间范围内,如果有消息发送到队列中,立即返回消息给用户;如果超过该时间,仍然没有消息,返回MessageNotExist;
如果(batch)receive message请求指定了wait seconds,以请求指定的时间为准;

LoggingEnabled

是否开启日志管理功能;
取值范围:True/False;
当该属性为True时,MNS 将收集队列的消息操作日志推送到指定的地方,日志管理请参考详情;

CreateTime

队列创建时间,从1970-1-1 00:00:00 到现在的秒值;

LastModifyTime

修改队列属性信息最近时间,从1970-1-1 00:00:00 到现在的秒值;

ActiveMessages

队列中处于 Active 状态的消息总数,为近似值;

InactiveMessages

队列中处于 Inactive 状态的消息总数,为近似值;

DelayMessages

队列中处于 Delayed 状态的消息总数,为近似值;

QueueURL

格式:http://$AccountId.mns.<Region>.aliyuncs.com/queues/$QueueName
mns.<Region>.aliyuncs.com: MNS 访问域名, Region 是 MNS 部署的区域,用户可以根据应用需要选择不同的地域;
AccountId: 队列所有者的帐号 ID;
QueueName: 队列名称,同一个AccountId在同 Region 中的队列名不能重名。

QueueMessage

队列消息

用户发送到队列的消息;
发送消息时可以指定消息体、消息延迟时长、消息优先级;
消息属性

MessageId

消息编号;
(batch) send/receive/peek message 操作返回该属性;
一个队列中每个消息都有唯一的 MessageId;
消息发送到队列中,MNS 会生成一个 MessageId,该编号一旦生成就不会变化,可以用来做数据校队;

NextVisibleTime

消息下次可被消费的时间,从1970年1月1日 00:00:00 000 开始的毫秒数;
(batch) receive message 和 change message visibility 操作返回该属性;

ReceiptHandle

消息临时句柄;
(batch) receive message 和 change message visibility 操作返回该属性;
该句柄用于删除和修改处于Inactive状态的消息,NextVisibleTime之前有效,超过该时间使用句柄 MNS 会提示MessageNotExist;
消息临时句柄只能使用一次,如果该句柄标识的消息状态发生改变,该句柄就会失效;

MessageBody

消息正文;
(batch) receive/peek message 操作返回该属性;

MessageBodyMD5

消息正文的MD5值;
(batch) send/receive/peek message 操作返回该属性;

EnqueueTime

消息发送到队列的时间,从 1970年1月1日 00:00:00 000 开始的毫秒数;
(batch) receive/peek message 操作返回该属性;

FirstDequeueTime

消息第一次被消费的时间,从1970年1月1日 00:00:00 000 开始的毫秒数;
(batch) receive/peek message 操作返回该属性;
如果消息从未被消费过,该属性与EnqueueTime相同;

DequeueCount

消息总共被消费的次数(即被receive的次数);
(batch) receive/peek message 操作返回该属性;

Priority

消息的优先级权值,取值范围:1~16,其中1为最高优先级;
(batch) receive/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 状态的消息。

Topic

主题是发布消息的目的地,发布者可以通过 PublishMessage 接口向主题发布消息。

主题属性

MaximumMessageSize

消息体的最大长度,单位为Byte;
取值范围:1024 ~ 65536Byte(64KB);
该属性用于限制发送到队列的消息体最大长度,超过该长度发布消息将失败;

LoggingEnabled

是否开启日志管理功能;
取值范围:True/False;
当该属性为True时,MNS 将收集主题的消息操作日志推送到指定的地方,日志管理请参考详情;

CreateTime

主题的创建时间,从 1970-1-1 00:00:00到现在的秒值;

LastModifyTime

修改主题属性信息的最近时间,从 1970-1-1 00:00:00 到现在的秒值;

MessageRetentionPeriod

消息在主题中的最长保留时间,单位为秒;
从发送到该主题开始经过此参数指定的时间后,不论消息是否被成功推送给用户都将被删除;

MessageCount

该主题中消息数目;
包含已经被推送给用户的消息,不包含过期被回收的消息;

TopicURL

标识 Topic 的URL,格式:http://$AccountId.mns.<Region>.aliyuncs.com/topics/$TopicName

mns.<Region>.aliyuncs.com:MNS 访问域名,Region 是 MNS 部署的区域,用户可以根据应用需要选择不同的地域,具体各区域的访问域名可以在控制台通过 获取地址 操作查看。
AccountId:主题所有者的帐号 ID,实际调用 MNS 的 API 时请换成实际的帐号 ID,查看方法请参考 快速入门。
TopicName:主题的名称,MNS 使用者在实际调用 MNS 的 API 时替换成实际的主题名称。同一个 AccountId 在同一个 Region 中的主题名称不能重名。

TopicMessage

用户发布到主题的消息;
发布消息时可以指定消息体、消息标签和消息额外属性;
主题消息的最长保留时间为1天,超过这个时间,不论消息是否成功推送给用户,都将被垃圾回收器回收;

消息属性

MessageId

消息的编号;
一个主题中每个消息都有唯一的 MessageId;

Message

消息正文;

MessageMD5

消息正文的MD5值;

MessageTag

消息的标签;
当发布消息时指定了消息标签,MNS 将只推送消息给接收这类标签消息的订阅;

PublishTime

消息的发布时间,从 1970-1-1 00:00:00 000 到消息发布时的毫秒值;

Subscription

Subscription 描述一个订阅关系,包括被订阅的主题和接收消息的Endpoint;
订阅者通过 Subscribe 接口创建订阅,MNS 根据订阅的描述给用户推送消息,推送的起点是订阅时 Topic 中最新的消息;
订阅创建成功后,MNS 会向指定的 Endpoint 推送消息。如果 Endpoint 不可用,MNS 会按照指定的重试策略进行重试,重试失败后,会丢弃消息;

订阅属性

Endpoint

接收消息的Endpoint;
支持类型:HttpEndpoint、QueueEndpoint和MailEndpoint;

FilterTag

过滤消息的标签;
类型:字符串;
指定了该属性后,MNS 仅推送消息标签与该属性一致的消息到对应的Endpoint;

NotifyStrategy

消息推送出现错误时的重试策略;
取值范围:BACKOFF_RETRY/EXPONENTIAL_DECAY_RETRY;
当推送消息失败时,MNS 将按照该属性指定的重试策略进行重试,超过重试策略的次数后,MNS 将丢弃这条消息,继续推送下一条消息;
具体的重试策略请参考 NotifyStrategy;

NotifyContentFormat

推送给Endpoint的消息格式;
取值范围:XML/SIMPLIFIED;
具体推送消息的格式请参考 NotifyContentFormat;

CreateTime

订阅的创建时间,从 1970-1-1 00:00:00 到现在的秒值;

LastModifyTime

修改订阅属性信息的最近时间,从 1970-1-1 00:00:00 到现在的秒值

SubscriptionURL

标识 Subscription 的 URL 格式:http://$AccountId.mns.<Region>.aliyuncs.com/topic/$TopicName/subscriptions/$SubscriptionName

mns.<Region>.aliyuncs.com:MNS 访问域名,Region 是 MNS 部署的区域,用户可以根据应用需要选择不同的区域,具体各区域的访问域名可以在控制台通过 获取地址 操作查看;
AccountId:表示主题所有者的帐号 ID,实际调用 MNS 的 API 时请替换成实际的帐号 ID;
TopicName:表示主题的名称,实际调用 MNS 的 API 时请替换成实际的主题名称;
SubscriptionName:表示Subscription的名称,实际调用 MNS 的 API 时请替换成实际 Subscription 的名称。同一个订阅者订阅相同的主题时,SubscriptionName 不能重复。

Endpoint

Endpoint 是用户订阅主题时,指定接收消息的终端地址;
当有消息发布到主题时,MNS 会主动将消息推送到对应的 Endpoint;
多个 Subscription 可以指定同一个 Endpoint;

HttpEndpoint

http 格式的Endpoint;
格式:http://$company.com[/uri],支持多级uri;
限制:Endpoint的uri不能以 “mns-reserverd-“ 开头;
MNS 将发送 http 请求到指定的Endpoint,用户在Endpoint端处理请求即可;

QueueEndpoint

以队列的资源描述作为Endpoint;
格式:acs:mns:{REGION}:{AccountID}:queues/{QueueName} ;
限制:只支持推送到 Topic 同Region同账号的队列中;
MNS 直接将消息写入到指定的队列中,用户通过receive message接口读取消息,具体使用方式请参考详情;

MailEndpoint

以Mail名称作为Endpoint;
格式:mail:directmail:{MailAddress};
MNS 将以mail的形式将消息推送到指定的邮箱中,具体使用方式请参考详情;

NotifyStrategy

NotifyStrategy 描述了 MNS 向 Enpoint 推送消息出现错误时的重试策略。MNS 支持以下几种重试策略,用户订阅主题时,可以指定一种重试策略:

策略描述参数
退避重试策略重试 3 次,每次重试的间隔时间是 10秒 到 20秒 之间的随机值BACKOFF_RETRY
指数衰减重试重试 176 次,每次重试的间隔时间指数递增至 512秒,总计重试时间为1天;每次重试的具体间隔为:1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 512 … 512 秒 (共167个512)EXPONENTIAL_DECAY_RETRY

NotifyContentFormat

NotifyContenFormat 用于指定 MNS 向 Endpoint 推送消息时,消息内容的格式。

XML

消息体为XML格式,包含消息正文和消息属性;
HttpEndpoint和QueueEndpoint支持该格式;
消息示例:
    <?xml version="1.0" encoding="utf-8"?>
      <Notification xlmns="http://mns.aliyuncs.com/doc/v1/">
          <TopicOwner>TopicOwner</TopicOwner>
          <TopicName>TopicName</TopicName>
          <Subscriber>Subscriber</Subscriber>
          <SubscriptionName>SubscriptionName</SubscriptionName>
          <MessageId>6CC4D900CA59A2CD-1-15180534A8F-200000002</MessageId>
          <Message>{1:"a", 2:"b"}</Message>
          <MessageMD5>F1E92841751D795AB325861034B5CB55</MessageMD5>
          <MessageTag>important</MessageTag>
          <PublishTime>1449556920975</MessagePublishTime>
      </Notification>
JSON

消息体为JSON格式,包含消息正文和消息属性;
HttpEndpoint和QueueEndpoint支持该格式;
消息示例:
    {
      "TopicOwner":"TopicOwner",
      "TopicName":"TopicName""Subscriber":"Subscriber",
      "SubscriptionName":"SubscriptionName",
      "MessageId":"6CC4D900CA59A2CD-1-15180534A8F-200000002",
      "Message":"xxxxx",
      "MessageMD5":"F1E92841751D795AB325861034B5CB55",
      "MessageTag":"important",
      "PublishTime":"1449556920975"
    }
SIMPLIFIED

消息体即用户发布的消息,不包含任何属性信息;
HttpEndpoint、QueueEndpoint、MailEndpoint均支持该格式;
消息体示例:
    {1:"a", 2:"b"}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值