全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
消息服务

MNS 常见问题

更新时间:2017-08-02 13:56:53   分享:   

什么是 MNS?

  • MNS 是 Aliyun Message Service 的简称,是阿里云提供的一种高效、可靠、安全、便捷、可弹性扩展的分布式消息服务。
  • MNS 能够帮助应用开发者在他们应用的分布式组件上自由的传递数据,构建松耦合系统。

用 MNS 可以做什么?

典型的使用场景:

  1. 将 MNS 与其他阿里云产品集成,让应用程序更加可靠、灵活。
  2. 将 MNS 用作工作队列,其中每条消息代表一项任务,需要通过一个流程来完成。一台或多台 ECS 可以从队列中读取并执行任务。
  3. 将业务流程中重要事件的通知保存在 MNS 中,每个事件在队列中都有一条对应的消息,需要知晓该事件的应用程序可以读取和处理对应的消息。

阿里云各地域对应关系说明

随着阿里云业务的不断发展,产品的地域也不断丰富,为了规范命名和适应国际化发展,阿里云将于2016年3月29日对各云产品地域进行更名,新旧名称对应关系如下表:

原名称 新的名称 英文名称
青岛 华北1 China North 1
北京 华北2 China North 2
杭州 华东1 China East 1
上海 华东2 China East 2
深圳 华南1 China South 1

MNS 不同地域的接入地址是什么?

区域 公网访问地址 私网访问地址 VPC私网访问地址
华北1 http(s)://{AccountId}.mns.cn-qingdao.aliyuncs.com http://{AccountId}.mns.cn-qingdao-internal.aliyuncs.com 暂无
华北2 http(s)://{AccountId}.mns.cn-beijing.aliyuncs.com http://{AccountId}.mns.cn-beijing-internal.aliyuncs.com http://{AccountId}.mns.cn-beijing-internal-vpc.aliyuncs.com
华东1 http(s)://{AccountId}.mns.cn-hangzhou.aliyuncs.com http://{AccountId}.mns.cn-hangzhou-internal.aliyuncs.com http://{AccountId}.mns.cn-hangzhou-internal-vpc.aliyuncs.com
华东2 http(s)://{AccountId}.mns.cn-shanghai.aliyuncs.com http://{AccountId}.mns.cn-shanghai-internal.aliyuncs.com http://{AccountId}.mns.cn-shanghai-internal-vpc.aliyuncs.com
华南1 http(s)://{AccountId}.mns.cn-shenzhen.aliyuncs.com http://{AccountId}.mns.cn-shenzhen-internal.aliyuncs.com http://{AccountId}.mns.cn-shenzhen-internal-vpc.aliyuncs.com
亚太(新加坡) http(s)://{AccountId}.mns.ap-southeast-1.aliyuncs.com http://{AccountId}.mns.ap-southeast-1-internal.aliyuncs.com http://{AccountId}.mns.ap-southeast-1-internal-vpc.aliyuncs.com
美国西部1(硅谷) http(s)://{AccountId}.mns.us-west-1.aliyuncs.com http://{AccountId}.mns.us-west-1-internal.aliyuncs.com http://{AccountId}.mns.us-west-1-internal-vpc.aliyuncs.com
亚太东北1(日本) http(s)://{AccountId}.mns.ap-northeast-1.aliyuncs.com http://{AccountId}.mns.ap-northeast-1-internal.aliyuncs.com
亚太东南2(悉尼) http(s)://{AccountId}.mns.ap-southeast-2.aliyuncs.com http://{AccountId}.mns.ap-southeast-2-internal.aliyuncs.com
欧洲中部1(法兰克福) http(s)://{AccountId}.mns.eu-central-1.aliyuncs.com http://{AccountId}.mns.eu-central-1-internal.aliyuncs.com
中东东部1(迪拜) http(s)://{AccountId}.mns.me-east-1.aliyuncs.com http://{AccountId}.mns.me-east-1-internal.aliyuncs.com
华东1金融云 http://{AccountId}.mns.cn-hzjbp-a-internal.aliyuncs.com
华东2金融云 http://{AccountId}.mns.cn-shanghai-finance-internal.aliyuncs.com
华南1金融云 http://{AccountId}.mns.cn-shenzhen-finance-internal.aliyuncs.com http://{AccountId}.mns.cn-shenzhen-finance-internal-vpc.aliyuncs.com

为了帮助保护用户的数据安全,MNS在公网提供了Https的接口,只需要把公网访问地址的http://换成https://即可。

AccountId 是什么?

Account ID 在阿里云注册用户的帐号 ID,在阿里云官网可以查看。

MNS 提供哪些可用的操作?

MNS 队列模型支持的操作指令有:

操作 描述
CreateQueue 创建一个新的消息队列
SetQueueAttributes 修改队列的属性
GetQueueAttributes 获取队列的属性
DeleteQueue 删除一个队列
ListQueue 列出用户名下的队列列表
SendMessage 生产者发送消息到指定的队列
BatchSendMessage 生产者批量发送消息到指定的队列
ReceiveMessage 消费者消费队列的消息
BatchReceiveMessage 消费者批量消费队列的消息
DeleteMessage 删除已经被消费过的消息
BatchDeleteMessage 批量删除已经被消费过的消息
PeekMessage 消费者查看队列的消息
BatchPeekMessage 消费者批量查看队列的消息
ChangeMessageVisibility 修改被消费过并且还处于的 Inactive 的消息到下次可被消费的时间

MNS 主题模型支持的操作指令有:

操作 描述
CreateTopic 创建一个新的主题
SetTopicAttributes 修改主题的属性
GetTopicAttributes 获取主题的属性
DeleteTopic 删除一个主题
ListTopic 列出用户名下的主题列表
Subscribe 订阅一个主题
SetSubscriptionAttributes 修改 Subscription 的属性
GetSubscriptionAttributes 获取 Subscription 的属性
Unsubscribe 取消订阅主题
ListSubscriptionByTopic 列出一个主题的 Subscription 列表
PublishMessage 发布消息到主题

MNS 相对于自主研发、商用或开源的消息队列系统有哪些好处?

与自行构建系统来管理消息队列或使用商用、开源的消息和通知服务相比,使用MNS的好处是:

  1. 无需大量前期投入来进行开发、配置;
  2. 随着你业务量的不断增大,无需持续投入硬件和管理资源;
  3. 缺省提供消息冗余存储,以便在硬件发生故障时不会丢失消息,相应的系统投入、开发、配置和部署将更为简单;
  4. 无需为消息服务后期投入部署和维护的资源,只需简单配置即可用于生产环境。

如何使用 MNS?

  1. 注册阿里云账号并在线开通 MNS 服务
  2. 通过 管理控制台-账号管理 获取帐号 ID,单击 AccessKeys 访问密钥(AccessKeyID)
  3. 进入消息服务管理控制台可以体验可视化的队列创建和删除、收发消息等基本操作
  4. 在应用程序中调用 API 接口(SDK)执行MNS的所有操作

系统中如何标识消息?

  • MessageId 用来标识在队列/主题中的一个消息,在一个队列/主题中每个消息都有唯一的MessageId,但在不同的队列/主题之间中并不唯一。
  • 当消息发送到 MNS 队列/主题时,MNS 会生成一个 MessageId,此 ID 一旦产生就不会改变。
  • 在队列模式下,当消息被取出时,MNS 会将消息的消息体、MessageId 以及该次请求的临时句柄( ReceiptHandle )一齐返回给用户。在有效期内,用户消费完毕之后,使用 ReceiptHandle 进行消息的删除。

MNS 是否支持长轮询?

支持!与传统的短轮询相比,长轮询只会在消息进入队列或长轮询超时时才返回响应。一旦消息可用,长轮询可立即以简单经济地方式从您的 MNS 队列检索消息。

有关长轮询的具体设置,请参照 MNS API 文档中有关 PollingWaitSeconds 属性的说明。

MNS 是否提供对消息的先入先出(FIFO)访问?

MNS 消费消息时尽量做到先进先出,正是因为分布式消息队列的一些特性并不能保证你能按照消息的发送顺序消费消息,如果你的业务必需先进先出,建议在消息中加入序号信息以便消费消息后进行重新排序。

MNS 是否可以与其他阿里云产品协作使用?

MNS 可以与 ECS、OSS 和 OTS 等阿里云服务一起使用,从而让应用程序具有更好的灵活性和可扩展性。常见的使用案例包括:创建需要互相通信却又不能同时处理相同工作量的多个组件或模块。在此情形中,MNS 队列可以承载消息,让用户在 ECS 实例上运行的应用程序能够有序地进行处理。ECS 实例可以读取该队列,处理任务,然后将结果作为消息发布到另一MNS队列(可能由其他应用程序进行进一步处理)。由于 ECS 允许应用程序动态扩展,应用程序开发者可根据 MNS 队列中的消息数(工作量),轻松改变计算实例的数量,确保作业得以及时处理。

如何确保在 MNS 中存储的数据的可靠性?

MNS 将所有队列和消息存储在阿里云高可靠、高可用的数据中心组成的网络中。所有消息冗余地存储在多台服务器上,当某台服务器出现问题时,冗余数据将会自动拷贝至其他服务器;这意味着单台服务器不可用或网络故障都不会对 MNS 队列中消息的安全性造成任何影响。

MNS 如何保证多个消息的消费者访问同一消息队列,而不会丢失消息或重复消费消息?

每个 MNS 队列都具有可配置的不可见时间段属性(即队列的取出消息隐藏时长属性)。当队列中的某条消息被取出后,在不可见时间段内,其他消费者将无法获取到该条消息。如果用户在不可见时间段内完成了消息的消费,则需要通过临时句柄(ReceiptHandle)进行消息的删除;如果超过不可见时间仍未完成消费,则需要发送不可见时间段的延长请求(ChangeVisibilityTimeout);否则消息将会在不可见时间段结束后重新被其他消费者取出。

每条消息会被接收多少次?

我们会在系统设计上保证您队列中的所有消息至少被消费一次,建议您加强应用服务的容错性,以便多次处理同一消息时不会造成错误或不一致。

如何保证我的消息队列中的消息是安全的?

我们提供了安全可靠的身份验证机制,确保您的 MNS 队列受到保护,防止遭到未经授权的访问。只有阿里云账户拥有者才能访问其创建的队列。

如何配置 MNS 以支持更长的消息保留期?

要配置消息保留期限,请使用 SetQueueAttributes 方法设置MessageRetentionPeriod 属性。此属性用于指定消息在MNS队列中保留的秒数。目前,消息保留期限的默认值为4天。使用 MessageRetentionPeriod 属性时,消息保留期限可以设置为 60 秒(1 分钟)到最长1296000 秒(15 天)之间的任何值。

消息在 MNS 中可以保留多久?

MNS中的消息保留期限是可配置的,您可以设置为1分钟到15天之间的任何值。默认值为4天;一旦达到消息保留期限,您的消息会被自动删除。较长消息保留期选项可提供更大的灵活性,允许在消息产生和消耗之间存在更长的间隔。

如何配置 MNS 以支持更大的消息大小?

要配置最大消息大小,请使用 SetQueueAttributes 方法设置MaximumMessageSize 属性。此属性指定MNS队列中的消息可以包含的字节数限值。可以设置为1024字节(1KB) 到最大65536 字节 (64KB)之间的任何值。如果消息长度超过了64KB,建议将数据存储在 OSS 中,MNS 只存储数据访问地址。

对于较长时间没有任何消息的队列,会怎样?

在您正常使用 MNS 服务期间,阿里云不会对非活跃的队列/主题进行删除操作。但是,如果您的 MNS 使用权限因为欠费或其他原因被停止了,那么我们将删除您名下的所有队列和主题。

为什么我的签名总是没算对?

有关签名计算的原理以及相关注意事项请参照 MNS API 参考手册,这里结合实例对签名方法进行说明:请求的HTTP header参数为:

  1. GET /MyQueue HTTP/1.1
  2. Host: $AccountId.mns.cn-hangzhou.aliyuncs.com
  3. Date: Thu, 09 Jul 2015 03:01:34 GMT
  4. x-mns-version:2015-06-06

需要进行加密的签名源字串为:

  1. GET
  2. (换行符)
  3. (换行符)
  4. Thu, 09 Jul 2015 03:01:34 GMT
  5. x-mns-version:2015-06-06
  6. /MyQueue

假设accessId为: TestAccessID, accesskey为:TestAccessSecret经过加密算法得出的签名值为:uwx3yeWoILzgmvesW0BQSgfM7b8=

不同地域中的同名队列是同一个队列吗?

不是,不同地域的同名队列是各自独立的。

删除队列实例之后,是否仍然会继续计费?

如果您不再需要使用某个队列,在删除该队列实例之后,同时需要停止针对该队列的所有API请求,否则MNS仍然会按照API请求次数进行计费。

删除主题实例之后,是否仍然会继续计费?

如果您不再需要使用某个主题,在删除该主题实例之后,从删除的第二天起将不再收取该主题的实例占用费,同时需要停止针对该主题的所有API请求,否则MNS仍然会按照API请求次数进行计费。

本文导读目录
本文导读目录
以上内容是否对您有帮助?