# スローサブスクリプション

通常、EMQXはメッセージの送信をミリ秒単位で完了しますが、主にネットワークの影響を受けます。しかし、クライアント側でサブスクリプションメッセージのレイテンシが非常に高くなる場合があります。この問題を解決するために、EMQXはスローサブスクリプション機能を提供しています。

## 動作原理

EMQXは、メッセージが**EMQXに到着してから**処理および送信が完了するまでの時間（遅延）を計測し始めます。

遅延が指定された閾値を超えた場合、EMQXは該当する**サブスクライバーとトピック**を**スローサブスクリプションリスト**に挿入するか、既存の記録を更新します。

スローサブスクリプションリストでは：

- 記録データは遅延時間の降順で表示され、最大1,000件まで保存できます。
- リストには閾値を超えたメッセージではなく、**サブスクライバー-トピック**のデータが記録されます。
- 記録が生成されると、新規の場合はリストに挿入され、既存の場合は発生時間が更新されます。いずれの場合もリスト全体が再ランキングされます。
- 記録生成後、指定された有効期間（デフォルト：300秒）内に再度トリガーされなければリストから削除されます。

メッセージ転送完了の定義はメッセージのQoSレベルによって異なります：

- QoS 0：メッセージが正常に送信された時点
- QoS 1：EMQXがクライアントからPUBACKパケットを受信した時点
- QoS 2：EMQXがクライアントからPUBCOMPパケットを受信した時点

メッセージレイテンシに影響する要因：

- パブリッシャーとEMQX間のネットワークが遅い（将来のリリースで対応予定）
- Hooksの実行速度が遅く、ACLチェック、ExHooks、ルールエンジンなどでメッセージパブリッシュがブロックされる
- キューにメッセージが過剰に蓄積し、レイテンシが大きくなる。例として、PUBLISHとSUBSCRIBEが同じ接続を共有し、多数のPUBLISHメッセージがキューに溜まる場合
- サブスクライバーの受信速度が遅い

## スローサブスクリプションの有効化と設定

<!-- TODO 补充配置文件配置方式，目前该方式有 BUG 暂时不在文档中提供。 -->

EMQXダッシュボードの左側ナビゲーションメニューから **診断** -> **スローサブスクリプション** をクリックします。**スローサブスクリプション**ページで、**有効化**ボタンをクリックしてください。

設定方法は以下の通りです：

- **統計閾値**：統計対象となるレイテンシの閾値。閾値を超えたメッセージ情報のみ収集されます。最小値：100ms
- **最大統計件数**：スローサブスクリプション統計記録テーブルの最大件数。最大値：1,000
- **記録の有効期限**：記録の有効期限。記録作成時からカウントを開始し、指定期間内に再度トリガーされなかった記録はリストから削除されます。デフォルト：300秒
- **統計タイプ**：レイテンシ計測方法。以下の3種類があります。
  - **whole**：メッセージがEMQXに到着してから送信完了まで
  - **internal**：メッセージがEMQXに到着してからEMQXがメッセージ送信を開始するまで
  - **response**：EMQXがメッセージ送信を開始してから送信完了まで

## スローサブスクリプションリストの確認

スローサブスクリプションリストには以下の項目が含まれます：

- **クライアントID**：スローサブスクリプション問題があるクライアント
- **トピック**：スローサブスクリプション問題があるトピック
- **遅延時間**：メッセージのレイテンシ
- **ノード**：スローサブスクリプション問題があるノード
- **更新日時**：記録の作成／更新日時

クライアントIDをクリックすると詳細を確認でき、問題のトラブルシューティングが可能です。
