排他サブスクライブ
排他サブスクライブは、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 すでに他のクライアントがこのトピックをサブスクライブしている。