Skip to content

排他サブスクライブ ​

排他サブスクライブは、EMQXがサポートする拡張されたMQTT機能です。これはトピックに対して排他的なサブスクライブを可能にします。つまり、同じトピックに対して同時にサブスクライブできるクライアントは1つだけです。現在のサブスクライバーがサブスクライブを解除するまで、他のサブスクライバーは該当トピックにサブスクライブできません。

サブスクライブを排他的にするには、トピック名の先頭にプレフィックスを追加する必要があります。以下の表は例を示しています。

例プレフィックス実際のトピック名
$exclusive/t/1$exclusive/t/1

クライアントAが$exclusive/t/1にサブスクライブすると、他のクライアントはAが$exclusive/t/1のサブスクライブを解除するまで、$exclusive/t/1にサブスクライブできません。

TIP

排他サブスクライブは必ず$exclusive/をプレフィックスとして付ける必要があります。上記の例では、他のクライアントはt/1に対しては通常通りサブスクライブ可能です。

設定ファイルで排他サブスクライブを有効化する ​

排他サブスクライブはデフォルトで無効化されています。設定ファイルで以下のように有効化できます。

bash
mqtt.exclusive_subscription.enable = true

MQTTX Desktopで排他サブスクライブを試す ​

前提条件

  • MQTTX Desktopを使った基本的なパブリッシュおよびサブスクライブ操作ができること
  • 排他サブスクライブが有効化されていること
  1. EMQXとMQTTX Desktopを起動します。New Connectionをクリックして、パブリッシャー用のクライアント接続を作成します。

    • Name欄にDemoと入力します。
    • Host欄にローカルホストの127.0.0.1を入力します(このデモの例として)。
    • 他の設定はデフォルトのままにして、Connectをクリックします。

    TIP

    MQTT接続の作成方法については、MQTTX Desktopで詳しく説明しています。

    新規接続の一般設定
  2. さらに2つのMQTT接続を作成し、それぞれSubscriber1とSubscriber2と名付けます。

  3. ConnectionsペインでSubscriber1の接続を選択し、New Subscriptionボタンをクリックしてサブスクライブを作成します。Topicテキストボックスに$exclusive/t/1と入力し、このトピックにサブスクライブします。Confirmをクリックします。

    排他トピックへのサブスクライブ
  4. ConnectionsペインでSubscriber2の接続を選択し、New Subscriptionボタンをクリックしてサブスクライブを作成します。Topicテキストボックスに$exclusive/t/1と入力し、このトピックにサブスクライブします。Confirmをクリックします。

    • エラーメッセージが表示されます。
    排他サブスクライブ失敗

MQTTX CLIで排他サブスクライブを試す ​

前提条件

  • MQTTX CLIを使った基本的なパブリッシュおよびサブスクライブ操作ができること
  • 排他サブスクライブが有効化されていること
  1. 以下のコマンドで排他サブスクライブを行います。

    bash
    mqttx sub -t "$exclusive/t/1"
  2. ステップ1のコマンドを再度実行して、トピック$exclusive/t/1に別のサブスクライブを試みます。以下のように返されます。

    bash
    subscription negated to t/2 with code 135

    排他サブスクライブのエラーコード一覧:

    コード理由
    0x8F排他サブスクライブが有効でない状態で$exclusive/を使用した。
    0x97既に別のクライアントがこのトピックにサブスクライブしている。