什么是轻量消息队列(原 MNS)

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

队列模型

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

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

队列模型消息流

队列模型消息流所示,生产者向队列发送消息,消费者从队列取出消息。

图 1. 队列模型消息流queuemodel

队列模型特性

  • 多种队列模式

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

  • 海量并发访问

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

  • 消息投递保障

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

  • 分布式事务消息

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

  • 日志管理

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

  • 云监控

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

主题模型

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

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

  • 让邮局投递员将报纸都投递(推送)到家里(特定的地址)。

  • 去就近的报刊亭(订阅点)自行获取报纸(报纸会先被邮局投递员集中送到各个报刊亭)。

主题模型消息流

主题模型消息流所示:

  • 主题上有多个订阅,每个订阅对应不同的队列。

  • 一条消息发布到主题后,会被分别推送到不同的订阅指定的队列。

  • 订阅支持消息过滤,您可在订阅中指定过滤标签。

    • 未指定过滤标签的订阅:无论消息有没有指定消息标签,都可以推送到指定的队列。

    • 已指定过滤标签的订阅:只有消息指定了匹配的消息标签,才会推送到指定的队列。

图 2. 主题模型消息流topicmodel

主题模型特性

  • 通知消息

    • 轻量消息队列(原 MNS)服务端主动推送消息到指定队列,减少用户端轮询和资源消耗,使您可以专注于业务逻辑,避免对其他消息服务客户端的依赖及过多代码影响服务稳定性。更多信息,请参见Endpoint签名认证主题使用手册

    • 对于因网络或其他原因无法提供回调地址的情况,轻量消息队列(原 MNS)仍支持将消息推送到队列,您可以直接从队列获取消息。原先使用队列模型的消费者可无缝消费主题中的消息。更多信息,请参见队列广播拉取消息模型

  • 一对多广播消息

    一条发布到主题中的消息可被多个订阅者订阅。轻量消息队列(原 MNS)会按照各订阅者指定的队列推送消息。发布一次即可推送到多个接收端,保证消息发布的原子性。

  • 消息标签过滤

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

  • 消息投递

    轻量消息队列(原 MNS)支持将消息推送到队列。更多信息,请参见队列广播拉取消息模型

  • 消息投递保障 :在消息有效期内,保证发布到主题中的消息会按照指定的策略和格式推送给用户端程序。更多信息,请参见NotifyStrategy

  • 多种消息格式

    • XML:消息体为XML格式,包含消息正文和消息属性。

    • JSON:消息体为JSON格式,包含消息正文和消息属性。

    • SIMPLIFIED:消息体即用户端发布的消息,不包含任何属性信息(精简格式,即文本格式)。更多信息,请参见:

  • 日志管理

    支持查看每条消息发布进主题的记录和每次推送给用户端的记录,包括重试推送的记录和结果等,能够全面展示每条消息的生命周期,方便问题调查。更多信息,请参见日志管理概述

  • 云监控

    支持查看消息推送的记录,当推送失败次数比较多时,通过添加报警的方式及时知晓。更多信息,请参见云监控