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

消息服务MNS同时支持各种类型消息推送。

消息服务MNS提供了两种模型:

  • 队列模型
  • 主题模型

两种功能模型的区别:

  • 队列模型支持一对一发送和接收消息;
  • 主题模型支持一对多发布和订阅消息,并且支持多种消息推送方式。

队列模型简介

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

打个比方,队列模型就如同一家旋转寿司店,寿司店中有多个寿司师傅(生产者)在制作精美的寿司(消息),每一份寿司都是独特的,每位顾客(消费者)同时从传送带上拿取中意的寿司进行食用(消费)。

队列模型特性

  • 丰富的队列属性配置

    丰富的队列属性配置选项,您可以进行队列属性的个性化配置来满足不同的应用场景,支持:普通队列、延迟队列、优先级队列等多种队列模式。

  • 支持海量并发访问

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

  • 消息投递保障

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

  • 分布式事务消息

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

  • 支持日志管理

    可以通过日志管理的方式,查看每一条消息发送、接收和删除的完整生命周期。用户可以通过日志管理,方便的进行问题调查。

    详见日志管理

  • 支持云监控

    用户可以通过云监控查看队列情况,并且可以自定义报警项,当队列情况不符合期望时,能够及时知晓。

    详见云监控

主题模型简介

主题订阅模型旨在提供一对多的发布订阅以及消息通知功能,支持用户实现一站式多种消息通知方式。

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

  • 让邮局投递员将报纸都投递(推送)到特定的地址(家里)
  • 去就近的订阅点(报刊亭)自行获取报纸,(报纸会先被邮局投递员集中送到各个报刊亭)
  • 让邮局直接把报纸电子版发送到自己指定的邮箱
  • 让邮局把报纸简讯通过短信的方式发送到自己的手机
  • 可以让邮局通过WebSocket的方式将报纸电子版直接推送到连接的多个终端上
  • 可以让报社通过指定移动推送接入点的方式将报纸电子版直接推送到手机APP上

如图所示:

  • 主题上有多个订阅,分别使用了不同的推送方式,有推送到HTTP Server 的,有推送到队列的,有推送到邮箱中的等等。
  • 一条消息发布到主题中后,会被分别推送到不同的订阅指定的Endpoint中。
  • 订阅支持消息过滤,可以在订阅中指定过滤标签。对于没有指定过滤标签的订阅,发送消息时,无论有没有指定消息标签,消息都可以推送到指定的接收端;对于指定了过滤标签的订阅(Subscription2),发送的消息,只有指定了匹配的消息标签(红色的消息B),消息才会推送到指定的接收端。

主题模型特性

  • 支持通知消息

    消息服务MNS服务端主动将消息推送给用户指定的回调地址(消息通知地址),消除用户端程序不必要的轮询和资源消耗。用户可以将资源集中在处理自身业务的逻辑中。并且也可以避免对其他消息服务产品客户端的依赖,避免因为过多代码引入从而影响自身服务的稳定性。

    详见HttpEndpointEndpoint签名认证主题使用手册以及主题HttpEndpoint本地调试工具

    同时,对于由于网络或者其他原因造成用户不方便提供回调地址的,消息服务MNS也支持将消息推送到队列中,用户仍然可以直接到队列中获取消息。原先使用队列模型的消费者,可以无缝消费主题中的消息。

    详见队列推送广播拉取消息模型

  • 支持一对多广播消息
    • 发布到主题中的一条消息可以同时被多个订阅者订阅,会被按照多个订阅指定的推送方式和Endpoint地址推送过去。用户同时可以从多个(种)渠道接收到这条消息。
    • 用户仅需发布一次,就可以将消息推送到多个接收端,保证了消息发布的原子性。
  • 支持消息标签过滤

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

    详见主题接口规范

  • 支持多种投递方式

    消息服务MNS支持多种消息投递方式,包括但不限于:

  • 消息投递保障

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

    • 退避重试(BACKOFF_RETRY)

      重试3次,每次重试的间隔时间是10秒到20秒之间的随机值

    • 指数衰减重试(EXPONENTIAL_DECAY_RETRY),

      重试176次,每次重试的间隔时间指数递增至 512秒,总计重试时间为1天;每次重试的具体间隔为:1,2,4,8,16,32,64,128,256,512,512 ... 512秒(共167个512)

    推送消息格式包括:

    • XML:消息体为XML格式,包含消息正文和消息属性;
    • JSON:消息体为JSON格式,包含消息正文和消息属性;
    • SIMPLIFIED(精简格式,即文本格式):消息体即用户发布的消息,不包含任何属性信息;

    详见NotifyStrategyNotifyContentFormat

  • 支持云产品事件通知

    消息服务MNS提供了事件通知的功能,用户可以通过在消息服务MNS上创建事件通知的规则,来关注其他阿里云产品指定资源上产生的事件,并且由消息服务MNS以消息的方式主动推送到指定的接收端。目前已接入OSS,用户可以通过事件通知功能监听和处理OSS中Bucket的管理事件、Bucket中Object的创建、删除、更新等事件。

    详见事件通知概述

  • 支持日志管理

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

    详见日志管理

  • 支持云监控

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

    详见云监控