自動サブスクライブ
注意
自動サブスクライブ機能は、EMQX Serverlessエディションでは利用できません。
自動サブスクライブは、EMQXプラットフォームがサポートする拡張されたMQTT機能です。自動サブスクリプション機能を有効にすると、クライアントが接続に成功した際に、あらかじめ定義されたトピックに自動的にサブスクライブされます。これにより、クライアントが明示的にSUBSCRIBEリクエストを送信する必要がなくなり、EMQXプラットフォームがサブスクリプション処理を自動で行います。
EMQX 5.0以前では、この機能はプロキシサブスクリプションとして知られていました。
コンソールでの自動サブスクライブ設定
EMQXプラットフォームコンソールで、対象のデプロイメントに移動します。左メニューから Monitor -> Auto Subscribe をクリックします。
Auto Subscribe ページで、右上の + Add ボタンをクリックします。
Add Auto Subscription ダイアログで、テスト用トピック
a/1を Topic テキストボックスに入力します。他の設定はデフォルトのままにします。- Topic: クライアントが自動的にサブスクライブするトピックを入力します。プレースホルダーを使って動的にトピックを構築することも可能です。詳細はプレースホルダーをご参照ください。
- QoS: トピックのサービス品質を指定します。選択肢は
0、1、2です。 - No local: 選択肢は
FalseまたはTrueです。 - Retain as Published: 指定したトピックで送信されるメッセージを保持するかどうかを指定します。選択肢は
FalseまたはTrueです。 - Retained Handling: 選択肢は
0、1、2です。

Confirm ボタンをクリックします。これで自動サブスクライブトピック
a/1が正常に作成されます。
これで自動サブスクリプション機能が有効になりました。新しいサブスクライバーは、EMQXプラットフォームに接続すると自動的にトピック a/1 にサブスクライブされます。
MQTTXを使った自動サブスクリプションの試行
トピック a/1 は、コンソールでの自動サブスクライブ設定で自動サブスクライブトピックとして設定されています。以下の手順は、クライアントがEMQXプラットフォームに接続すると自動的にトピック a/1 にサブスクライブされる様子を示します。
MQTTX Web を開きます。
New Connection をクリックして、パブリッシャー用のクライアント接続を作成します。以下の項目を設定します。
- Name:
Demoと入力します。 - Host: デプロイメントの Overview ページの MQTT Connection Information セクションにあるアドレスを入力します。
- Port:
8084を入力します。 - Username と Password: デプロイメントの Access Control -> Authentication ページで設定した認証情報を入力します。
他の設定はデフォルトのままにして、Connect をクリックします。
- Name:
もう一つのMQTTクライアント接続を作成し、名前を
Subscriberとします。Connections ペインでクライアント
Demoを選択し、トピックにa/1を入力します。このトピックにメッセージを送信します。クライアント
Subscriberは新たにサブスクリプションを作成しなくても、自動的にメッセージを受信します。クライアント
Demoも新しい接続としてメッセージを受信します。TIP
パブリッシュ/サブスクライブパターンでは、クライアントは送信者とサブスクライバーの両方になり得ます。
EMQXプラットフォームコンソールに戻り、左メニューから Monitor -> Subscriptions をクリックします。トピック
a/1に自動的にサブスクライブされた2つのサブスクリプションが確認できます。
プレースホルダー
自動サブスクライブは、プレースホルダーを使ってトピックを動的に構築することをサポートしています。プレースホルダーの形式は ${} です。サポートされている変数は以下の通りです。
${clientid}: クライアントID${username}: クライアントのユーザー名${host}: クライアントがEMQXプラットフォームに接続した際のIPアドレス
例えば、クライアントIDが emqx_c で、設定されたトピックが a/${clientid} の場合、クライアントはEMQXプラットフォームに接続後、自動的にトピック a/emqx_c にサブスクライブされます。