# 自動サブスクライブ

::: tip 注意

自動サブスクライブ機能は、EMQX Serverlessエディションでは利用できません。

:::

自動サブスクライブは、EMQXプラットフォームがサポートする拡張されたMQTT機能です。自動サブスクリプション機能を有効にすると、クライアントが接続に成功した際に、あらかじめ定義されたトピックに自動的にサブスクライブされます。これにより、クライアントが明示的に`SUBSCRIBE`リクエストを送信する必要がなくなり、EMQXプラットフォームがサブスクリプション処理を自動で行います。

EMQX 5.0以前では、この機能はプロキシサブスクリプションとして知られていました。

## コンソールでの自動サブスクライブ設定

1. EMQXプラットフォームコンソールで、対象のデプロイメントに移動します。左メニューから **Monitor** -> **Auto Subscribe** をクリックします。

2. **Auto Subscribe** ページで、右上の **+ Add** ボタンをクリックします。

3. **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` です。

   ![add_auto_subscription](./_assets/add_auto_subscription.png)
   
   **Confirm** ボタンをクリックします。これで自動サブスクライブトピック `a/1` が正常に作成されます。

これで自動サブスクリプション機能が有効になりました。新しいサブスクライバーは、EMQXプラットフォームに接続すると自動的にトピック `a/1` にサブスクライブされます。

## MQTTXを使った自動サブスクリプションの試行

トピック `a/1` は、[コンソールでの自動サブスクライブ設定](#コンソールでの自動サブスクライブ設定)で自動サブスクライブトピックとして設定されています。以下の手順は、クライアントがEMQXプラットフォームに接続すると自動的にトピック `a/1` にサブスクライブされる様子を示します。

1. [MQTTX Web](https://mqttx.app/web-client#/recent_connections) を開きます。

2. **New Connection** をクリックして、パブリッシャー用のクライアント接続を作成します。以下の項目を設定します。

   - **Name**: `Demo` と入力します。
   - **Host**: デプロイメントの **Overview** ページの **MQTT Connection Information** セクションにあるアドレスを入力します。
   - **Port**: `8084` を入力します。
   - **Username** と **Password**: デプロイメントの **Access Control** -> **Authentication** ページで設定した認証情報を入力します。

   他の設定はデフォルトのままにして、**Connect** をクリックします。

3. もう一つのMQTTクライアント接続を作成し、名前を `Subscriber` とします。

4. **Connections** ペインでクライアント `Demo` を選択し、トピックに `a/1` を入力します。このトピックにメッセージを送信します。

   - クライアント `Subscriber` は新たにサブスクリプションを作成しなくても、自動的にメッセージを受信します。

   - クライアント `Demo` も新しい接続としてメッセージを受信します。

     ::: tip

     パブリッシュ／サブスクライブパターンでは、クライアントは送信者とサブスクライバーの両方になり得ます。
     
     :::

5. EMQXプラットフォームコンソールに戻り、左メニューから **Monitor** -> **Subscriptions** をクリックします。トピック `a/1` に自動的にサブスクライブされた2つのサブスクリプションが確認できます。

   ![auto_subscribe_subscriptions](./_assets/auto_subscribe_subscriptions.png)

## プレースホルダー

自動サブスクライブは、プレースホルダーを使ってトピックを動的に構築することをサポートしています。プレースホルダーの形式は `${}` です。サポートされている変数は以下の通りです。

- `${clientid}`: クライアントID
- `${username}`: クライアントのユーザー名
- `${host}`: クライアントがEMQXプラットフォームに接続した際のIPアドレス

例えば、クライアントIDが `emqx_c` で、設定されたトピックが `a/${clientid}` の場合、クライアントはEMQXプラットフォームに接続後、自動的にトピック `a/emqx_c` にサブスクライブされます。
