Message Service (MNS) のメッセージフィルタリング機能を使用すると、タグに基づいてトピックからさまざまなサブスクリプションにメッセージをルーティングできます。 このトピックでは、メッセージフィルタリングの仕組みとメッセージフィルタリングタグの設定方法について説明します。
背景情報
デフォルトでは、トピックへのサブスクリプションは、そのトピックに発行されたすべてのメッセージを受信します。
サブスクリプションにメッセージフィルタリングタグが設定されている場合、メッセージタグがサブスクリプションのメッセージフィルタリングタグに一致するメッセージのみを受信します。
サブスクリプションにメッセージフィルタリングタグが設定されていない場合、メッセージタグの有無にかかわらず、トピックからのすべてのメッセージを受信します。
仕組み
次の図は、異なるメッセージタグを持つメッセージが、メッセージフィルタリングタグを持つサブスクリプションによってフィルタリングされ、宛先キューにプッシュされる仕組みを示しています。

上記の図では、Topic 1 には 3 つのサブスクリプションがあります。Subscription 1 と Subscription 2 は異なるメッセージフィルタリングタグを持ち、Subscription 3 はメッセージフィルタリングタグを持ちません。これらのサブスクリプションのエンドポイントは、それぞれ Queue 1、Queue 2、Queue 3 です。
-
メッセージタグがサブスクリプションのメッセージフィルタリングタグに一致する場合、次のようにフィルタリングされます。
-
Message Service (MNS) はメッセージ 1 をキュー 1 にプッシュします。
-
メッセージサービス (MNS) はメッセージ 2 をキュー 2 にプッシュします。
-
-
サブスクリプションにメッセージフィルタリングタグが設定されていない場合、次のようにフィルタリングされます。
-
Message Service (MNS) は メッセージ 1 を キュー 3 にプッシュします。
-
Message Service (MNS) はメッセージ 2 をキュー 3 にプッシュします。
-
Message Service (MNS) はメッセージ 3 をキュー 3 にプッシュします。
-
メッセージフィルタリングタグの設定
この例では、TopicA からのメッセージをフィルタリングするために、サブスクリプションにメッセージフィルタリングタグを設定する方法を示します。tag-a メッセージタグを持つメッセージのみが QueueB にプッシュされます。トピックサブスクリプションの作成方法については、「サブスクリプションの作成」をご参照ください。
-
購読の作成 パネルの メッセージのフィルタリングタグ フィールドに
tag-aと入力し、TopicA からのメッセージをフィルタリングして QueueB にプッシュします。[Retry Policy] を [バックオフリトライ] に、[Message Push Format] を [SIMPLIFIED] に設定します。
-
メッセージをフィルタリングするには、SDK を使用してメッセージを発行する際に、一致するメッセージタグも設定する必要があります。完全なサンプルコードについては、「ステップ 5: メッセージの発行」をご参照ください。
次のサンプルコードは、トピックにメッセージを発行する際にメッセージタグを設定する方法を示しています。
TopicMessage message = new Base64TopicMessage(); // サブスクリプションのメッセージフィルタリングタグと一致するように、メッセージタグを設定します。 message.setMessageTag("tag-a");