スローサブスクリプション
通常、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メッセージがキューに溜まる場合
- サブスクライバーの受信速度が遅い
スローサブスクリプションの有効化と設定
EMQXダッシュボードの左側ナビゲーションメニューから 診断 -> スローサブスクリプション をクリックします。スローサブスクリプションページで、有効化ボタンをクリックしてください。
設定方法は以下の通りです:
- 統計閾値:統計対象となるレイテンシの閾値。閾値を超えたメッセージ情報のみ収集されます。最小値:100ms
- 最大統計件数:スローサブスクリプション統計記録テーブルの最大件数。最大値:1,000
- 記録の有効期限:記録の有効期限。記録作成時からカウントを開始し、指定期間内に再度トリガーされなかった記録はリストから削除されます。デフォルト:300秒
- 統計タイプ:レイテンシ計測方法。以下の3種類があります。
- whole:メッセージがEMQXに到着してから送信完了まで
- internal:メッセージがEMQXに到着してからEMQXがメッセージ送信を開始するまで
- response:EMQXがメッセージ送信を開始してから送信完了まで
スローサブスクリプションリストの確認
スローサブスクリプションリストには以下の項目が含まれます:
- クライアントID:スローサブスクリプション問題があるクライアント
- トピック:スローサブスクリプション問題があるトピック
- 遅延時間:メッセージのレイテンシ
- ノード:スローサブスクリプション問題があるノード
- 更新日時:記録の作成/更新日時
クライアントIDをクリックすると詳細を確認でき、問題のトラブルシューティングが可能です。