阿里云消息服务MNS(Message Service)是一种高效、可靠、安全、便捷和可弹性扩展的分布式消息服务。消息服务MNS能够帮助开发者在应用的分布式组件之间自由地传递数据、通知消息,从而构建松耦合系统。消息服务MNS支持队列模型和主题模型。

队列模型

队列模型提供高可靠、高并发的一对一消费模型,即队列中的每一条消息都只能够被某一个消费者消费。

队列就像一家旋转寿司店。寿司店中有多个寿司师傅(生产者)在制作精美的寿司,每一份寿司都是独特的,顾客(消费者)可以从传送带上拿取中意的寿司进行食用(消费)。

队列模型消息流

图 1所示,应用系统A(生产者)向队列发送消息,应用系统B(消费者)从队列取出消息。

图 1. 队列模型消息流
queuemodel

队列模型特性

  • 多种队列模式

    支持普通队列、延迟队列。您可以个性化地配置队列属性以满足不同应用场景。

  • 海量并发访问

    支持多个生产者和消费者并发访问同一队列,并能确保某条消息在取出之后的特定时间内,无法被其他消费者获得。您可以根据业务需求自由伸缩并发访问数。

  • 消息投递保障

    在消息有效期内,确保消息至少能被成功消费一次。消息服务MNS接入阿里云账号体系,用户间资源隔离,确保队列中的消息不会被非法获取。

  • 分布式事务消息

    提供完善的分布式环境下事务消息解决方案。

  • 日志管理

    支持查看每条消息的完整生命周期事件,包括发送、接收和删除,方便问题排查。更多信息,请参见日志管理概述

  • 云监控

    支持查看队列情况,并且可以自定义报警项,当队列情况不符合期望时,您能够及时知晓。更多信息,请参见云监控

主题模型

主题模型提供一对多的发布订阅模型,支持消息通知。

主题就像一份报纸,多个读者到邮局订阅了这份报纸。当报纸推出最新一期时,读者(包括邮局的合作伙伴)可以选择以下方式来获取:

  • 让邮局投递员将报纸都投递(推送)到家里(特定的地址)。
  • 去就近的报刊亭(订阅点)自行获取报纸(报纸会先被邮局投递员集中送到各个报刊亭)。

主题模型消息流

图 2所示:

  • 主题上有多个订阅,每个订阅对应不同的队列。
  • 一条消息发布到主题后,会被分别推送到不同的订阅指定的队列。
  • 订阅支持消息过滤,您可在订阅中指定过滤标签。
    • 未指定过滤标签的订阅:无论消息有没有指定消息标签,都可以推送到指定的队列。
    • 已指定过滤标签的订阅:只有消息指定了匹配的消息标签,才会推送到指定的队列。
图 2. 主题模型消息流
topicmodel

主题模型特性

  • 通知消息
    • 消息服务MNS服务端主动将消息推送到您指定的队列,消除用户端不必要的轮询和资源消耗。您可以将资源集中在处理自身业务的逻辑中,避免对其他消息服务产品客户端的依赖,避免因为过多代码引入而影响自身服务的稳定性。更多信息,请参见:
    • 对于因为网络或者其他原因不方便提供回调地址的情况,消息服务MNS依然支持将消息推送到队列中,您仍然可以直接到队列中获取消息。原先使用队列模型的消费者,可以无缝消费主题中的消息。更多信息,请参见:
  • 一对多广播消息
    • 发布到主题中的一条消息可以被多个订阅者订阅。消息服务MNS会按照多个订阅指定的队列去推送消息。
    • 您仅需发布一次,就可以将消息推送到多个接收端,保证了消息发布的原子性。
  • 消息标签过滤

    在支持一对多广播消息的基础上,在订阅中还支持对消息进行过滤。可以订阅主题中带有特定标签的消息。在创建订阅时指定消息过滤标签,然后PublishMessage时指定消息标签,消息服务MNS在推送消息时会根据标签进行过滤,仅推送消息标签与订阅中指定的过滤标签匹配的消息到指定队列上。更多信息,请参见主题接口规范

  • 消息投递
    消息服务MNS支持消息推送到队列:
  • 消息投递保障

    在消息有效期内,保证发布到主题中的消息会按照指定的策略和格式推送给用户端程序。推送策略包括:

    • 退避重试(BACKOFF_RETRY)
      • 重试3次。
      • 每次重试的间隔时间是10秒到20秒之间的随机值。
    • 指数衰减重试(EXPONENTIAL_DECAY_RETRY)
      • 重试176次。
      • 总计重试时间为1天。
      • 每次重试的间隔时间指数递增:1,2,4,8,16,32,64,128,256,512,512,...,512秒(共167个512秒)。
  • 多种消息格式
    • XML:消息体为XML格式,包含消息正文和消息属性。
    • JSON:消息体为JSON格式,包含消息正文和消息属性。
    • SIMPLIFIED:消息体即用户端发布的消息,不包含任何属性信息(精简格式,即文本格式)。更多信息,请参见:
  • 日志管理

    您可以通过日志管理的方式,查看每一条消息发布进主题的记录,以及每一次推送给用户端的记录,包括重试推送的记录、推送结果等,能够展示每条消息的生命周期。您可以通过日志管理,方便的进行问题调查。更多信息,请参见日志管理概述

  • 云监控

    您可以通过云监控查看消息推送的记录,及时查看和监控消息的推送情况,当推送失败次数比较多时,能够通过添加报警的方式及时知晓。更多信息,请参见云监控