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

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

## 動作原理

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

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

スローサブスクリプションリストについて：

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

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

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

メッセージ遅延に影響を与える要因：

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

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

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

EMQXダッシュボードの左ナビゲーションメニューから **Diagnose** -> **Slow Subscriptions** をクリックします。**Slow Subscriptions** ページで **Enable** ボタンをクリックしてください。

設定項目は以下の通りです：

- **Stats Threshold**: 統計を取るためのレイテンシ閾値。この値を超えるメッセージ情報のみ収集されます。最小値：100ms
- **Maximum Number of Statistics**: スローサブスクリプション統計記録テーブルの最大レコード数。最大値：1,000
- **Eviction Time of Record**: 記録の有効期間。記録作成からカウントを開始し、指定期間内に再度トリガーされなかった記録はリストから削除されます。デフォルト：300秒
- **Stats Type**: レイテンシ計算方法。以下のいずれかを選択します
  - **whole**: メッセージがEMQXに到着してから送信完了までの時間
  - **internal**: メッセージがEMQXに到着してからEMQXがメッセージの配信を開始するまでの時間
  - **response**: EMQXがメッセージ配信を開始してから送信完了までの時間

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

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

- **Client ID**: スローサブスクリプション問題があるクライアント
- **Topic**: スローサブスクリプション問題があるトピック
- **Duration**: メッセージの遅延時間
- **Node**: スローサブスクリプション問題があるノード
- **Updated**: 記録の作成・更新日時

Client IDをクリックすると詳細を表示し、問題のトラブルシューティングが可能です。
