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

上の図では、サブスクライバー 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 にランダムにプッシュします。
共有サブスクリプション機能は、IoT Platform のサーバー側サブスクリプションに統合されています。IoT Platform は、Advanced Message Queuing Protocol 経由でビジネス サーバーにメッセージを送信できます。詳細については、「サーバー側サブスクリプション」をご参照ください。
サーバー側のタスクスケジューリング
共有サブスクリプション機能に基づいて、メッセージをタスクを表すものとして使用し、各タスクを IoT デバイスにランダムに割り当てて、基本的なタスクスケジューリングを実装できます。たとえば、次の図のデバイスはロボットです。ビジネス サーバーは処理タスクをプッシュします。デバイスの 1 つがタスクに応答した場合、共有サブスクリプション機能は処理タスクをロボットの 1 つだけにプッシュします。