スローサブスクリプション
通常、EMQXはメッセージの送信をミリ秒単位で完了しますが、主にネットワークの影響を受けます。しかし、クライアント側でサブスクリプションメッセージのレイテンシが非常に高くなるケースがあります。この問題を解決するために、EMQXはスローサブスクリプション機能を提供しています。
動作原理
EMQXはメッセージがEMQXに到着してから処理および送信されるまでの時間(遅延)を計測し始めます。
遅延が指定された閾値を超えた場合、EMQXは該当するサブスクライバーとトピックをスローサブスクリプションリストに追加するか、既存の記録を更新します。
スローサブスクリプションリストについて:
- 記録は遅延時間の降順で表示され、最大1000件まで保存されます。
- リストには閾値を超えたメッセージではなく、サブスクライバー-トピックのデータが記録されます。
- 新しい記録が生成されるとリストに挿入され、既存の記録の場合は発生時間が更新されます。いずれの場合もリスト全体が再ランキングされます。
- 記録生成後、指定された有効期間内(デフォルト:300秒)に再度トリガーされなければリストから削除されます。
メッセージ送信完了の定義はQoSレベルによって異なります:
- QoS 0: メッセージが正常に送信された時点
- QoS 1: EMQXがクライアントからPUBACKパケットを受信した時点
- QoS 2: EMQXがクライアントからPUBCOMPパケットを受信した時点
メッセージ遅延に影響を与える要因:
- パブリッシャーとEMQX間のネットワークが遅い(将来のリリースで対応予定)
- フックの実行速度が遅く、ACLチェック、ExHooks、ルールエンジンなどでメッセージパブリッシュがブロックされる
- キューにメッセージが大量に蓄積し、著しい遅延が発生する(例:PUBLISHとSUBSCRIBEが同じ接続を共有し、多数のPUBLISHメッセージがキューに溜まる)
- サブスクライバーの受信速度が遅い
スローサブスクリプションの有効化と設定
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をクリックすると詳細を表示し、問題のトラブルシューティングが可能です。