消息过滤

消息服务MNS的消息过滤功能是指将一个主题的消息通过不同的标签推送到不同的订阅渠道。本文介绍消息过滤的功能以及如何设置消息过滤标签。

背景信息

通常情况下,在主题中创建订阅可以将消息推送至已订阅的推送目标。即消息没有设置消息标签并且订阅也没有设置消息过滤标签时,所有消息都可以被成功推送到推送目标。

当订阅设置了消息过滤标签时,只有当消息的消息标签和订阅的消息过滤标签一致时,消息才能被成功推送到推送目标。

特殊情况下,当订阅没有设置消息过滤标签时,无论消息是否设置了消息标签,都可以成功推送消息到推送目标。

功能说明

下图介绍了携带不同消息标签的消息,经过携带了消息过滤标签的订阅过滤后被推送到目标队列的过程。

过滤标签

上图示例场景中,在主题Topic 1创建3个消息过滤标签不同的订阅Subscription 1、Subscription 2和Subscription 3。这3个订阅的推送目标分别是Queue 1、Queue 2和Queue 3。

  • 消息的消息标签和订阅的消息过滤标签一致。消息过滤过程如下:

    • 消息服务MNS将Message 1推送到队列Queue 1。

    • 消息服务MNS将Message 2推送到队列Queue 2。

  • 订阅没有消息过滤标签。消息过滤过程如下:

    • 消息服务MNS将Message 1推送到队列Queue 3。

    • 消息服务MNS将Message 2推送到队列Queue 3。

    • 消息服务MNS将Message 3推送到队列Queue 3。

主题订阅添加消息过滤标签

本示例介绍通过设置订阅的标签值,将主题(TopicA)中标签值为tag-a的消息推送到队列(QueueB),实现消息过滤的功能。关于主题订阅的具体操作,请参见创建订阅

  1. 创建订阅面板消息过滤标签中填写主题(TopicA)的标签值为tag-a,将消息推送到队列(QueueB)实现消息过滤。

    image.png

  2. 使用SDK订阅主题消息时,可以通过设置消息的标签值来进行消息过滤。完整的示例代码,请参见步骤五:发布消息

    向主题发送消息时设置消息的标签值的示例代码如下:

    	TopicMessage message = new Base64TopicMessage();
    
        // 这里的标签值要和订阅规则里的过滤标签值一致。
        message.setMessageTag("tag-a");