排他サブスクライブ
排他サブスクライブは、EMQXがサポートする拡張されたMQTT機能です。これはトピックに対して排他的なサブスクライブを可能にします。つまり、同じトピックに対して同時にサブスクライブできるクライアントは1つだけです。現在のサブスクライバーがサブスクライブを解除するまで、他のサブスクライバーは該当トピックにサブスクライブできません。
サブスクライブを排他的にするには、トピック名の先頭にプレフィックスを追加する必要があります。以下の表は例を示しています。
| 例 | プレフィックス | 実際のトピック名 |
|---|---|---|
| $exclusive/t/1 | $exclusive/ | t/1 |
クライアントAが$exclusive/t/1にサブスクライブすると、他のクライアントはAが$exclusive/t/1のサブスクライブを解除するまで、$exclusive/t/1にサブスクライブできません。
TIP
排他サブスクライブは必ず$exclusive/をプレフィックスとして付ける必要があります。上記の例では、他のクライアントはt/1に対しては通常通りサブスクライブ可能です。
設定ファイルで排他サブスクライブを有効化する
排他サブスクライブはデフォルトで無効化されています。設定ファイルで以下のように有効化できます。
mqtt.exclusive_subscription.enable = trueMQTTX Desktopで排他サブスクライブを試す
前提条件
- MQTTX Desktopを使った基本的なパブリッシュおよびサブスクライブ操作ができること
- 排他サブスクライブが有効化されていること
EMQXとMQTTX Desktopを起動します。New Connectionをクリックして、パブリッシャー用のクライアント接続を作成します。
- Name欄に
Demoと入力します。 - Host欄にローカルホストの
127.0.0.1を入力します(このデモの例として)。 - 他の設定はデフォルトのままにして、Connectをクリックします。
TIP
MQTT接続の作成方法については、MQTTX Desktopで詳しく説明しています。

- Name欄に
さらに2つのMQTT接続を作成し、それぞれ
Subscriber1とSubscriber2と名付けます。Connectionsペインで
Subscriber1の接続を選択し、New Subscriptionボタンをクリックしてサブスクライブを作成します。Topicテキストボックスに$exclusive/t/1と入力し、このトピックにサブスクライブします。Confirmをクリックします。
Connectionsペインで
Subscriber2の接続を選択し、New Subscriptionボタンをクリックしてサブスクライブを作成します。Topicテキストボックスに$exclusive/t/1と入力し、このトピックにサブスクライブします。Confirmをクリックします。- エラーメッセージが表示されます。

MQTTX CLIで排他サブスクライブを試す
前提条件
- MQTTX CLIを使った基本的なパブリッシュおよびサブスクライブ操作ができること
- 排他サブスクライブが有効化されていること
以下のコマンドで排他サブスクライブを行います。
bashmqttx sub -t "$exclusive/t/1"ステップ1のコマンドを再度実行して、トピック
$exclusive/t/1に別のサブスクライブを試みます。以下のように返されます。bashsubscription negated to t/2 with code 135排他サブスクライブのエラーコード一覧:
コード 理由 0x8F 排他サブスクライブが有効でない状態で $exclusive/を使用した。0x97 既に別のクライアントがこのトピックにサブスクライブしている。