Message ServiceMNS的訊息過濾功能是指將一個主題的訊息通過不同的標籤推送到不同的訂閱渠道。本文介紹訊息過濾的功能以及如何設定訊息過濾標籤。
背景資訊
通常情況下,在主題中建立訂閱可以將訊息推送至已訂閱的推送目標。即訊息沒有設定訊息標籤並且訂閱也沒有設定訊息過濾標籤時,所有訊息都可以被成功推送到推送目標。
當訂閱設定了訊息過濾標籤時,只有當訊息的訊息標籤和訂閱的訊息過濾標籤一致時,訊息才能被成功推送到推送目標。
特殊情況下,當訂閱沒有設定訊息過濾標籤時,無論訊息是否設定了訊息標籤,都可以成功推送訊息到推送目標。
功能說明
下圖介紹了攜帶不同訊息標籤的訊息,經過攜帶了訊息過濾標籤的訂閱過濾後被推送到目標隊列的過程。
上圖樣本情境中,在主題Topic 1建立3個訊息過濾標籤不同的訂閱Subscription 1、Subscription 2和Subscription 3。這3個訂閱的推送目標分別是Queue 1、Queue 2和Queue 3。
訊息的訊息標籤和訂閱的訊息過濾標籤一致。訊息過濾過程如下:
Message ServiceMNS將Message 1推送到隊列Queue 1。
Message ServiceMNS將Message 2推送到隊列Queue 2。
訂閱沒有訊息過濾標籤。訊息過濾過程如下:
Message ServiceMNS將Message 1推送到隊列Queue 3。
Message ServiceMNS將Message 2推送到隊列Queue 3。
Message ServiceMNS將Message 3推送到隊列Queue 3。
主題訂閱添加訊息過濾標籤
本樣本介紹通過設定訂閱的標籤值,將主題(TopicA)中標籤值為tag-a的訊息推送到隊列(QueueB),實現訊息過濾的功能。關於主題訂閱的具體操作,請參見建立訂閱。
在建立訂閱面板訊息過濾標籤中填寫主題(TopicA)的標籤值為tag-a,將訊息推送到隊列(QueueB)實現訊息過濾。
使用SDK訂閱主題訊息時,可以通過設定訊息的標籤值來進行訊息過濾。完整的範例程式碼,請參見步驟五:發布訊息。
向主題發送訊息時設定訊息的標籤值的範例程式碼如下:
TopicMessage message = new Base64TopicMessage(); // 這裡的標籤值要和訂閱規則裡的過濾標籤值一致。 message.setMessageTag("tag-a");