すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:共有サブスクリプション

最終更新日:Mar 26, 2025

このトピックでは、MQTT 5.0 の共有サブスクリプション機能について説明します。

背景情報

MQTT は、パブリッシュ/サブスクライブ パターンに基づいて設計されています。メッセージが公開されると、すべてのサブスクライバーがメッセージを受信できます。特定のシナリオでは、1 つまたは複数のサブスクライバーだけが特定のメッセージを受信するようにしたい場合があります。共有サブスクリプション機能は、このようなシナリオに適しています。共有サブスクリプション機能を使用する場合、サブスクライバーは共有サブスクリプション タグを指定し、サブスクライバー グループに参加する必要があります。

説明

このようにして、サブスクライバー グループのサブスクライバーの 1 つだけがメッセージを受信できます。

image..png

上の図では、サブスクライバー C とサブスクライバー D は標準プロセスに従って demo/topic Topic をサブスクライブし、パブリッシャー A も標準プロセスに従って demo/topic Topic にメッセージを公開します。サブスクライバー A とサブスクライバー B は、共有サブスクリプション機能を使用します。メッセージは、サブスクライバー A またはサブスクライバー B にランダムに送信されます。

共有サブスクリプション Topic $share/group/demo/topic には、次の項目が含まれます。

  • 共有サブスクリプション タグ: $share

  • サブスクライバー グループ: group1。値を指定する必要があります。

  • 元の Topic: demo/topic。値を指定する必要があります。

IoT Platform は、$share 共有サブスクリプション タグとサブスクライバー グループ名 group1 に基づいて、宛先サブスクリプションが共有サブスクリプションであり、group1 という名前のサブスクライバー グループに属していることを識別します。共有サブスクリプション機能は、ワイルドカード文字をサポートしています。たとえば、すべてのメッセージをサブスクライブするには、$share/group1/# Topic をサブスクライブします。

制限事項

  • 共有サブスクリプション機能は、排他的 Enterprise Edition インスタンスと標準 MQTT ベース インスタンスのゲートウェイでのみ使用できます。

  • 共有サブスクリプションを使用する複数のサブスクライバーがサブスクライバー グループに存在する場合、IoT Platform はサブスクライバーの 1 つにメッセージをランダムにプッシュします。

  • 共有サブスクリプション機能は、MQTT 5.0 経由で IoT Platform に接続されているデバイスでのみ使用できます。デバイスが共有サブスクリプション ルールに準拠していても、MQTT 3.1 経由で IoT Platform に接続されているデバイスでは、共有サブスクリプション機能は使用できません。

シナリオ

サーバー側の負荷分散

多数のデバイスが接続され、IoT Platform にメッセージを送信する場合、メッセージを処理するには複数のビジネス サーバーが必要です。IoT Platform でサポートされている共有サブスクリプション機能を使用すると、複数のビジネス サーバーにメッセージを配信できます。これは、負荷分散の実装に役立ちます。ビジネス サーバー A とビジネス サーバー B は、同じサブスクライバー グループを使用します。次の図に示すように、IoT Platform はデバイス関連のメッセージをビジネス サーバー A またはビジネス サーバー B にランダムにプッシュします。image..png

説明

共有サブスクリプション機能は、IoT Platform のサーバー側サブスクリプションに統合されています。IoT Platform は、Advanced Message Queuing Protocol 経由でビジネス サーバーにメッセージを送信できます。詳細については、「サーバー側サブスクリプション」をご参照ください。

サーバー側のタスクスケジューリング

共有サブスクリプション機能に基づいて、メッセージをタスクを表すものとして使用し、各タスクを IoT デバイスにランダムに割り当てて、基本的なタスクスケジューリングを実装できます。たとえば、次の図のデバイスはロボットです。ビジネス サーバーは処理タスクをプッシュします。デバイスの 1 つがタスクに応答した場合、共有サブスクリプション機能は処理タスクをロボットの 1 つだけにプッシュします。image..png